我的嵌套资源在模型和routes.rb中关联:
resources :foos do
resources :bars
end
我的应用程序路由正常,但我似乎无法证明有关我的嵌套路由的任何断言:
describe BarsController do
it "should have a route to 'show'" do
assert_generates "/foos/bars/1",
{controller: :bars, action: :show, id: "1"}
end
这是错误:
Failure/Error: assert_generates "/foos/bars/1",
ActionController::RoutingError:
No route matches {:controller=>"bars", :action=>"show", :id=>"1"}
如何测试这些嵌套路线?
答案 0 :(得分:3)
您可以将assert_generates
,assert_recognizes
和assert_routing
用于testing routes。例如,
assert_generates "/foo/bar/1",
{ :controller => "bar", :action => "show", :id => "1" }
答案 1 :(得分:2)
当你运行rake routes
时,你应该看到你的嵌套路线看起来像这样:
foo_bar GET /foos/:foo_id/bars/:id(.:format) bars#show
因此需要两个参数来匹配此路线:foo_id
和id
。由于您只提供id
,因此无法找到路线。
此外,为了测试rspec中的路由,您可能会发现使用内置routes_to
匹配器而不是回退到assert_*
更有用,如下所示:
it "routes to the 'show' action" do
{ get: "/foos/123/bars/456" }.
should route_to controller: "bars",
action: "show",
foo_id: "123",
id: "456"
end