Rails明明存在的路由测试却找不到?
Rails test can't find route when it clearly exists?
好吧,我累了,而且是 rails 的新手,所以可能缺少一些非常基本的东西。无论如何,我刚刚开始一个新项目,正在为静态页面实现一个简单的控制器。写了一些单元测试只是为了确保我所有的路线都是正确的(目前只有 4 个)。其中三个通过了,但第四个给了我这个错误信息:
1) Error:
StaticPagesControllerTest#test_terms_of_service_should_return_success:
ActionController::UrlGenerationError: No route matches {:action=>"terms", :controller=>"static_pages
"}
test/controllers/static_pages_controller_test.rb:18:in `block in <class:StaticPagesControllerTes
t>'
它说找不到路线。但是,当我清扫路线时,它显然存在:
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact
privacy GET /privacy(.:format) static_pages#privacy
terms GET /terms(.:format) static_pages#terms_of_service
这是 routes.rb 的部分:
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'privacy' => 'static_pages#privacy'
get 'terms' => 'static_pages#terms_of_service'
这里是失败测试的代码:
test "terms_of_service should return success" do
get 'terms'
assert_response :success
assert_select 'title', "Terms Of Service"
end
我可以直接在浏览器中访问 localhost:3000/terms 并且它有效。知道这里发生了什么吗?
控制器测试不测试路由,测试操作。你想要:
get 'terms_of_service'
好吧,我累了,而且是 rails 的新手,所以可能缺少一些非常基本的东西。无论如何,我刚刚开始一个新项目,正在为静态页面实现一个简单的控制器。写了一些单元测试只是为了确保我所有的路线都是正确的(目前只有 4 个)。其中三个通过了,但第四个给了我这个错误信息:
1) Error:
StaticPagesControllerTest#test_terms_of_service_should_return_success:
ActionController::UrlGenerationError: No route matches {:action=>"terms", :controller=>"static_pages
"}
test/controllers/static_pages_controller_test.rb:18:in `block in <class:StaticPagesControllerTes
t>'
它说找不到路线。但是,当我清扫路线时,它显然存在:
about GET /about(.:format) static_pages#about
contact GET /contact(.:format) static_pages#contact
privacy GET /privacy(.:format) static_pages#privacy
terms GET /terms(.:format) static_pages#terms_of_service
这是 routes.rb 的部分:
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'privacy' => 'static_pages#privacy'
get 'terms' => 'static_pages#terms_of_service'
这里是失败测试的代码:
test "terms_of_service should return success" do
get 'terms'
assert_response :success
assert_select 'title', "Terms Of Service"
end
我可以直接在浏览器中访问 localhost:3000/terms 并且它有效。知道这里发生了什么吗?
控制器测试不测试路由,测试操作。你想要:
get 'terms_of_service'