pic*_*rdo 8 routing rspec ruby-on-rails
我有两个控制器,我使用铁轨脚手架发电机创建.我希望它们嵌套在一个名为"demo"的文件夹中,然后运行
rails g scaffold demo/flows
rails g scaffold demo/nodes
Run Code Online (Sandbox Code Playgroud)
然后我决定在流内嵌套节点,并改变我的路由文件,如下所示:
namespace :demo do
resources :flows do
resources :nodes
end
end
Run Code Online (Sandbox Code Playgroud)
但是这种变化导致了对ActionController :: Routing错误的节点的rspec测试.
15) Demo::NodesController DELETE destroy redirects to the demo_nodes list
Failure/Error: delete :destroy, :id => "1"
ActionController::RoutingError:
No route matches {:id=>"1", :controller=>"demo/nodes", :action=>"destroy"}
Run Code Online (Sandbox Code Playgroud)
问题是rspec正在寻找错误的路线.它应该寻找"demo/flows/1/nodes".它还需要一个模拟流程模型,但我不知道如何提供.这是我生成的rspec文件中的示例代码:
def mock_node(stubs={})
@mock_node ||= mock_model(Demo::Node, stubs).as_null_object
end
describe "GET index" do
it "assigns all demo_nodes as @demo_nodes" do
Demo::Node.stub(:all) { [mock_node] }
get :index
assigns(:demo_nodes).should eq([mock_node])
end
end
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解我需要提供流模型吗?
iwa*_*bed 16
你有两个不同的问题,所以你可能想要拆分它们,因为你的第二个问题与这篇文章的标题无关.我建议使用FactoryGirl创建模拟模型https://github.com/thoughtbot/factory_girl
您的路由错误来自这样的事实:您的嵌套路由在每个之后都需要id,如下所示:
/demo/flows/:flow_id/nodes/:id
Run Code Online (Sandbox Code Playgroud)
当您对对象执行删除操作时,您需要传入流ID,否则它将不知道您正在谈论的路由.
delete :destroy, :id => "1", :flow_id => "1"
Run Code Online (Sandbox Code Playgroud)
在将来,检查其预期的最简单方法是运行rake routes
并比较该路由的输出与您传入的params.
demo_flow_node /demo/flows/:flow_id/nodes/:id(.:format) {:action=>"destroy", :controller=>"demo/flows"}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7118 次 |
最近记录: |