gpt4 book ai didi

ruby-on-rails - 如何使用 Rspec 测试带有嵌套路由的 Controller ?

转载 作者:行者123 更新时间:2023-12-04 04:08:06 24 4
gpt4 key购买 nike

我有 2 个 Controller ,是使用 Rails 的脚手架生成器创建的。我希望它们嵌套在一个名为“demo”的文件夹中,然后运行

rails g scaffold demo/flows
rails g scaffold demo/nodes

然后我决定在流中嵌套节点,并像这样更改我的路由文件:
namespace :demo do 
resources :flows do
resources :nodes
end
end

但这种变化导致节点的 rspec 测试因 ActionController::Routing 错误而中断。
  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"}

问题是 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

有人可以帮助我了解我需要如何提供流模型吗?

最佳答案

你在这里有两个不同的问题,所以你可能想把它们分开,因为你的第二个问题与这篇文章的标题无关。我建议使用 FactoryGirl 来创建模拟模型 https://github.com/thoughtbot/factory_girl

您的路线错误来自这样一个事实,即您的嵌套路线在每个路线之后都需要 id,如下所示:

/demo/flows/:flow_id/nodes/:id

当您对对象进行删除时,您需要传入流 ID,否则它将不知道您在说什么路由。
delete :destroy, :id => "1", :flow_id => "1"

将来,检查预期结果的最简单方法是运行 rake routes并将该路线的输出与您传入的参数进行比较。
demo_flow_node  /demo/flows/:flow_id/nodes/:id(.:format)   {:action=>"destroy", :controller=>"demo/flows"}

关于ruby-on-rails - 如何使用 Rspec 测试带有嵌套路由的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6714732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com