Как заставить истории работать с restful_authentication и огурцом? - PullRequest
2 голосов
/ 25 марта 2009

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

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

  1. редиректы не работают сразу, несмотря на то, что они создали маршрут 'map.root: controller => "my_controller" ":
    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. история гласит, что метод logged_in? защищен, несмотря на вызов файла features/step_definitions/ra_env.rb:
    ApplicationController.send(:public, :logged\_in?, :current\_user, :authorized?)
    Разве этот вызов не делает эти методы доступными без использования заглушки?

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

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

Ответы [ 7 ]

2 голосов
/ 01 апреля 2009

Я провел некоторые исследования, и вот что я получил. 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 следит за перенаправлениями. В качестве обходного пути вы можете прокомментировать эти строки в своем сеансе вебрата, но это, вероятно, не приличное решение. Я немного поработаю и выложу где-нибудь патч.

2 голосов
/ 02 февраля 2010

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

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

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

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

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. У кого-нибудь еще есть похожая ошибка?

1 голос
/ 05 апреля 2009

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

Включение config.cache_classes = false снова приводит к ошибке.

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

1 голос
/ 29 марта 2009

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

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

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

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

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

0 голосов
/ 03 июля 2009

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

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

features / step_definitions / user_steps.rb: 16: в /^(.*) (.*) user named '(.*)'$/' features/step_definitions/user_steps.rb:29:in / ^ нет пользователя (. *) С именем '(. *) '$ /'

(Огурцы :: избыточности)

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

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

0 голосов
/ 27 марта 2009

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

0 голосов
/ 25 марта 2009

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

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

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

...