_path的用法给出"没有路由匹配。"错误

时间:2017-06-07 20:49:24

标签: ruby-on-rails ruby

我正在关注Rails的教程,我有一些页面,我正在添加一些测试。

我正在尝试使用help_path而不是:help在我的pages_controller_test中:

test "should get help" do
  get help_path
  assert_response :success
  assert_select "title", "Help | #{@base_title}"
end

我在routes.rb文件中添加了这一行:

 get  '/help',    to: 'pages#help'

但是我收到了这个错误:

  

1)错误:   PagesControllerTest#test_should_get_help:   ActionController :: UrlGenerationError:没有路由匹配{:action =>" / help",:controller =>" pages"}       test / controllers / pages_controller_test.rb:62:在`block in'

我尝试了一些解决方案,但没有一个解决了我的问题。 我也尝试过使用这一行:

match '/home' => 'main_pages#home', :as => :home

但它也没有用。

我的rails版本是:4.2.4 我的Ruby版本是:ruby 2.1.9p490(2016-03-30修订版54437)[x86_64-linux-gnu]

$ rake路线的输出:

 Prefix Verb URI Pattern          Controller#Action
 root GET  /                    pages#home
 help GET  /help(.:format)      pages#help
 courses GET  /courses(.:format)   pages#courses
 programs GET  /programs(.:format)  pages#programs
 schools GET  /schools(.:format)   pages#schools
 dashboard GET  /dashboard(.:format) pages#dashboard
 profile GET  /profile(.:format)   pages#profile
 account GET  /account(.:format)   pages#account
 signout GET  /signout(.:format)   pages#signout

编辑: 我可以在我的html代码中使用help_path ..等等没有任何问题,但在测试中它会给出错误。 谢谢:))

1 个答案:

答案 0 :(得分:1)

我使用repo,Rails 4.2.4,Minitest 5.10.2运行了测试,并且唯一一个没有通过的测试是使用get help_path的测试。我只放了3个测试来缩短帖子:

PagesControllerTest#test_should_get_help_using_"get_:help" = 0.39 s = .
PagesControllerTest#test_should_get_help_using_"get_help_path" = 0.00 s = E
PagesControllerTest#test_should_get_help_using_"get_'help'" = 0.01 s = .

Finished in 0.405330s, 7.4014 runs/s, 9.8685 assertions/s.

  1) Error:
PagesControllerTest#test_should_get_help_using_"get_help_path":
ActionController::UrlGenerationError: No route matches {:action=>"/help", :controller=>"pages"}
    test/controllers/pages_controller_test.rb:70:in `block in <class:PagesControllerTest>'

3 runs, 4 assertions, 0 failures, 1 errors, 0 skips

我做了什么:

$ rm -rf Gemfile.lock (because of a json -v 1.8.1 gem error)
$ bundle
$ rake db:migrate
$ rake db:migrate RAILS_ENV=test
$ rake test test/controllers/pages_controller_test.rb -v

您可以使用help_path作为测试指定控制器和操作的路径来使测试工作:

  

assert_routing声称已正确处理给定路径的路由   解析的选项(在expected_options哈希中给出)匹配   路径。基本上,它声称Rails识别出给出的路由   expected_options。

或者:

  

assert_recognizes声称路径和选项都符合两种方式;换句话说,它   验证路径生成选项,然后生成选项   路径。这基本上结合了assert_recognizes和assert_generates   迈进一步。

像:

test "should get help using assert_recognizes and help_path" do
  assert_recognizes({controller: 'pages', action: 'help'}, help_path)
  assert_response :success
end

test "should get help using assert_routing and help_path" do
  assert_routing help_path, controller: 'pages', action: 'help'
  assert_response :success
end