RSpec Rails登录filter

我最近开始使用我的Rails(3.0.8)应用程序使用rspec-rails(2.6.1)。 我已经习惯了Test :: Unit,而且我似乎无法为我的测试方法提供filter。 我喜欢尽可能保持DRY,所以我想设置一个filter,我可以在调用测试方法之前调用任何将作为Authlogic用户登录的测试方法。 我尝试使用spec_helper.rb中的RSpecfilter来完成此操作:

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规范时,我收到此错误:

 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. 

布莱什。 我每次测试只能发送一个HTTP请求吗? 我也尝试删除我的authenticate_admin方法(在config.before块内),没有任何运气。

不幸的是,目前还没有办法在全局定义的挂钩before做你想要做的事情。 原因是before挂钩按照它们注册的顺序执行beforeRSpec.configure中声明的RSpec.configurerspec-rails内部注册以设置控制器,请求,响应等之前注册。

另外,这已经报告到https://github.com/rspec/rspec-rails/issues/391 。

你应该使用shulda的macrons。 要使用shoulda修改spec_helper.rb

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

然后可以在控制器规范中设置filter

 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