[英]How to test controllers with nested routes using Rspec?
我有 2 個控制器,它們是使用腳手架生成器創建的。 我希望它們嵌套在一個名為“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”。 它還需要一個模擬 model 用於流程,但我不知道如何提供。 這是我生成的 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
有人可以幫助我了解我需要如何提供流程 model 嗎?
您在這里有兩個不同的問題,因此您可能希望將它們分開,因為您的第二個問題與這篇文章的標題無關。 我建議使用 FactoryGirl 創建模擬模型https://github.com/thoughtbot/factory_girl
您的路由錯誤來自這樣一個事實,即您的嵌套路由在每個路由之后都需要 id,如下所示:
/demo/flows/:flow_id/nodes/:id
當你在 object 上進行刪除時,你需要傳入流 ID,否則它不會知道你在說什么路由。
delete :destroy, :id => "1", :flow_id => "1"
將來,檢查它所期望的最簡單的方法是運行rake routes
並將該路由的 output 與您傳入的參數進行比較。
demo_flow_node /demo/flows/:flow_id/nodes/:id(.:format) {:action=>"destroy", :controller=>"demo/flows"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.