Фильтр входа в RSpec Rails - PullRequest
2 голосов
/ 18 июня 2011

Я недавно переключился, начал использовать rspec-rails (2.6.1) с моим приложением Rails (3.0.8).Я привык к Test :: Unit, и я не могу заставить фильтр работать для моих методов тестирования.Мне нравится, чтобы все было как можно более сухим, поэтому я хотел бы настроить фильтр, который я могу вызывать для любого метода тестирования, который будет входить в систему как пользователь Authlogic до вызова метода теста.Я попытался выполнить это с помощью RSpec-фильтра в spec_helper.rb:

config.before(:each, :login_as_admin => true) do 
  post "/user_sessions/create", :user_session => {:username => "admin", :password => "admin"}   
end

Затем я использую его в соответствующем методе тестирования (в данном случае spec / controllers / admin_controller_spec.rb):

require 'spec_helper'

describe AdminController do  
  describe "GET index" do        
    it("gives a 200 response when visited as an admin", :login_as_admin => true) do   
      get :index
      response.code.should eq("200")
    end    
  end
end

Однако я получаю эту ошибку при запуске rspec spec :

Failures:

  1) AdminController GET index gives a 200 response when visited as an admin
     Failure/Error: Unable to find matching line from backtrace
     RuntimeError:
       @routes is nil: make sure you set it in your test's setup method.

Blech.Могу ли я отправить только один HTTP-запрос на тест?Я также попытался заглушить мой метод authenticate_admin (внутри блока config.before), но безуспешно.

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

К сожалению, в настоящее время нет способа сделать то, что вы пытаетесь сделать, в глобально определенном хуке before. Причина в том, что before хуки выполняются в том порядке, в котором они зарегистрированы, а те, которые объявлены в RSpec.configure, регистрируются до того, который rspec-rails регистрируется внутри для настройки контроллера, запроса, ответа и т. Д.

Также об этом сообщалось https://github.com/rspec/rspec-rails/issues/391.

0 голосов
/ 18 июня 2011

Вы должны использовать макроны Шульды.Для использования следует изменить ваш spec_helper.rb

RSpec.configure do |config|
  config.include Clearance::Shoulda::Helpers
end

, а затем можете настроить фильтр в спецификации контроллера, как

require 'spec_helper'

describe AdminController do  
  fixture :users

  before(:each) do
    sign_in_as users(:your_user)
  end
  describe "GET index" do        
    it("gives a 200 response when visited as an admin", :login_as_admin => true) do   
      get :index
      response.code.should eq("200")
    end    
  end
end
...