Rails在function测试中找不到路由

Rails版本3.0.4和Ruby 1.9.2

我正在使用设计gem,并设置我的应用程序,以便用户必须登录才能执行任何操作。 在编写我的function测试时,我发现所有的测试都抛出了同样的错误。

`method_missing': undefined method `new_user_session_path' 

这很奇怪,如果我rake routes我可以看到

 new_user_session GET /devise/login(.:format) {:action=>"new", :controller=>"devise/sessions"} 

我还可以确认,当我运行应用程序时,所有link_to可以使用该路径。

对于某个控制器的测试来看其他路线,我有什么特别之处吗?

的routes.rb

 Nge::Application.routes.draw do resources :companies resources :users devise_for :users, :path => "devise", :path_names => { :sign_in => 'login', :sign_out => 'logout', :password => 'secret', :confirmation => 'verification', :unlock => 'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' } ... end 

测试/function/ companies_controller_test.rb

 require 'test_helper' class CompaniesControllerTest < ActionController::TestCase context "When a user is NOT signed in" do [:index, :new].each do |action| context "and GET ##{action.to_s}" do setup {get action} should set_the_flash.to(/must sign-up/) should redirect_to(new_user_session_path) end end ... end end 

你需要添加

 @request.env["devise.mapping"] = Devise.mappings[:user] 

测试中的某个地方,可能是在安装方法中。

见这里的讨论。

您可以尝试重新订购路线,以便设计路线是第一个吗?

所以routes.rb文件看起来像这样 –

Nge::Application.routes.draw do resources :companies devise_for :users, :path => "devise", :path_names => { :sign_in => 'login', :sign_out => 'logout', :password => 'secret', :confirmation => 'verification', :unlock => 'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' } resources :users ... end
Nge::Application.routes.draw do resources :companies devise_for :users, :path => "devise", :path_names => { :sign_in => 'login', :sign_out => 'logout', :password => 'secret', :confirmation => 'verification', :unlock => 'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' } resources :users ... end