Как заставить истории работать с restful_authentication и огурцом?

После клонирования последних стабильных версий

в чистое приложение rails и следуя (как я полагаю) всем инструкциям для каждого плагина, огуречные истории по-прежнему терпят неудачу :-(. Вот краткое изложение проблем:

  1. redirects are not working right off the bat despite having created the 'map.root :controller => "my_controller"' route :
    expected redirect to "/", got no redirect (Spec::Expectations::ExpectationNotMetError)
    /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations.rb:57:in `fail_with'
    /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/handler.rb:14:in `handle_matcher'
    /cygdrive/c/development/test/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb:31:in `should'.
    /features/step_definitions/user_steps.rb:111:in `/^an? (.*) user named '(.*)'$/'
    features/sessions.feature:25:in `And an activated user named 'reggie''
    
  2. the story says the logged_in? method is protected despite the features/step_definitions/ra_env.rb file calling:
    ApplicationController.send(:public, :logged\_in?, :current\_user, :authorized?)
    Doesn't that call make those methods available without needing stubbing?

О, и я пытаюсь запустить autospec, поэтому для его запуска я выполнил следующие команды:

export AUTOFEATURE=true
rake spec:server:start
ruby script/autospec

person btelles    schedule 25.03.2009    source источник
comment
К сожалению, приведенный ниже ответ не был очень полезным ... есть ли шанс, что кто-то поймет, почему появляются хотя бы ошибки "защищенных методов"?   -  person btelles    schedule 26.03.2009


Ответы (7)


Я провел небольшое исследование и вот что у меня есть. ra_response_steps.rb ожидают, что перенаправление будет грубым, а затем история, определяющая, следует ли выполнять перенаправление или нет. Это не удается, потому что реализация Webrat Session имеет следующий код:

    def request_page(url, http_method, data) #:nodoc:
      h = headers
      h['HTTP_REFERER'] = @current_url if @current_url

      debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}"
      if h.empty?
        send "#{http_method}", url, data || {}
      else
        send "#{http_method}", url, data || {}, h
      end

      save_and_open_page if exception_caught? && Webrat.configuration.open_error_files?
      raise PageLoadError.new("Page load was not successful (Code: #{response_code.inspect}):\n#{formatted_error}") unless success_code?

      reset

      @current_url  = url
      @http_method  = http_method
      @data         = data

      if internal_redirect?
        check_for_infinite_redirects
        request_page(response_location, :get, {})
      end

      return response
    end

Обратите внимание на if internal_redirect? ... end. Это тот случай, когда наши тесты терпят неудачу, потому что webrat следует перенаправлениям. В качестве обходного пути вы можете прокомментировать эти строки в сеансе webrat, но это, вероятно, не лучшее решение. Я еще немного поработаю и выложу где-нибудь патч.

person Hugo    schedule 31.03.2009
comment
Отличный Хьюго! Спасибо! Это решило часть проблемы с перенаправлением. - person btelles; 05.04.2009

Я нашел это сообщение в блоге, которое хорошо объясняет суть проблемы:

http://blog.andrew.premdas.org/articles/2008/10/15/webrat-visits-and-redirects

в основном, успокаивающие тесты аутентификации пытаются протестировать то, что не следует тестировать с помощью webrat. Итак, рекомендованное выше изменение является противоположностью того, что, по моему мнению, вероятно, следует изменить.

Я изменил тесты Restful Authentication, чтобы они не проверяли перенаправления, а просто проверяли, на какой странице вы оказались. Однако проблема с некоторыми перенаправлениями, которую я не понимаю, все еще сохраняется:

Then she should be at the new session page                     # features/step_definitions/ra_response_steps.rb:15
  expected "session/new", got redirected to "http://www.example.com/session/new" (Spec::Expectations::ExpectationNotMetError)

Я не понимаю, откуда взялся этот example.com. у кого-нибудь еще есть похожая ошибка?

person Gabe S.    schedule 02.02.2010

Мне пришлось изменить определение функции выхода в user_steps.rb на:

def log_out
получить '/ logout'
конец

Раньше он пытался получить '/ session / destroy', который существует только в том случае, если вы не удалите маршруты по умолчанию.

Также убедитесь, что вы «включили AuthenticatedSystem» в application_controller.

Тем не менее, все еще борется с некоторыми другими проблемами ...

person Community    schedule 29.03.2009

Что касается проблемы «Защищенного метода», я понял, что если я не использую autospec и оставлю config.cache_classes = true, то тесты пройдут.

Поворот config.cache_classes = false снова вводит ошибку.

Похоже, что проблема либо в том, как кэширование классов реализовано в рельсах, либо в том, как rspec управляет созданными классами. К сожалению, у меня нет ресурсов для более подробного изучения этого журнала, и, похоже, это хорошо обсуждается по адресу: http://groups.google.com/group/rspec/browse_thread/thread/500ede090bd08996/25a3d9a7d283696b?lnk=gst&q=cache_classes#25a3d9a7d283696b

person btelles    schedule 05.04.2009

У меня не так много советов, просто сочувствие - недавно я потратил несколько часов на решение той же проблемы. С другой стороны, это то, как я изучил RSpec.

Одна вещь, которую я обнаружил, - это то, что многие сбои были тем, что я все равно хотел изменить - например, я не хотел перенаправлять на '/' при входе в систему, а где-то еще.

В конце концов, большинство сбоев было легко исправить, как только я понял, где искать.

person bradheintz    schedule 25.03.2009
comment
Ха-ха ... спасибо за сочувствие. К сожалению, я учусь медленнее, чем ты, и последние три дня я провел, пытаясь во всем разобраться ... может, полноценный ночной сон не повредит. :-) - person btelles; 26.03.2009

Я работаю над теми же проблемами. Я еще не там, но думаю, что ApplicationController.send (: public,: logged_in ?,: current_user,: authorized?) Должен вместо этого перейти в support / env.rb.

person Community    schedule 27.03.2009

Я тоже получаю некоторые из упомянутых ошибок. Но первая проблема, возникающая в моем приложении, заключается в следующем:

Определения нескольких шагов имеют одно и то же регулярное выражение:

features / step_definitions / user_steps.rb: 16: в _1 _ / ^ нет (. *) пользователя с именем '(. *)' $ / '

(Огурец :: Избыточный)

Конечно, я могу это исправить, но за этим последует еще много ошибок (включая защищенный метод logged_in? На контроллере, неисправные спецификации RSpec и т. Д.).

Кто-нибудь знает, все ли мы здесь делаем что-то в корне не так? Или просто restful_authentication не работает в текущем выпуске?

person Community    schedule 03.07.2009