我正在使用rspec 3.4.1测试已升级到Rails 4.2的Rails应用程序。在这个应用程序中,我有以下路线(由rake routes
打印):
contact_g GET /foo/contact/:legs_trip_id/:user_id(.:format)
foo#find_edit { :trip_type_id=>"123", :user_id=>"0", :locale=>"en", :format=>/html|js|json/, :legs_trip_id=>/\d+/}
在我的应用程序中,在开发和生产模式下,这条路线运行正常。但在测试中,我在尝试使用路线时遇到以下错误。示例规范:
describe "#find_edit, logged in:" do
before do
@c1 = mock_model(Foo, :id => 1059)
# mock a User, set up session and expectations to mimick a logged in user
@u = pseudo_login
end
it "..." do
expect(@u).to receive # ...
get :find_edit, :legs_trip_id => "123", :pn_id => 252, :sa_id => 1923, :email => 1, :ee_id => "bla", :trip_type_id => "123", user_id: @u.id
expect(response).to redirect_to(...)
end
作为控制器测试,在" get" line rspec抛出此错误:
ActionController::UrlGenerationError:
No route matches { :action=>"find_edit", :controller=>"foo", :ee_id=>"bla", :email=>"1", :legs_trip_id=>"123", :pn_id=>"252", :sa_id=>"1923", :trip_type_id=>"123", :user_id=>"19" }
作为功能或集成规范,我无法访问request.session
来登录我的模拟用户,因此无法启动测试:
undefined local variable or method `request' for #<RSpec::ExampleGroups::FindingByLTAndUserIDFindEditLoggedIn:...>
在规范设置期间调用的辅助代码中:
request.session[:user_id] = mocked_user.id
如何运行这些规格?它曾经在Rails 3.x中工作。