Rails 4 rspec UrlGenerationError

时间:2016-06-16 19:53:02

标签: ruby-on-rails rspec controller routes

我正在使用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中工作。

0 个答案:

没有答案