Rspec:2级嵌套资源的控制器规范

我的routes.rb

namespace :magazine do resources :pages do resources :articles do resources :comments end end end 

在为评论编写控制器规范时:

 describe "GET 'index'" do before(:each) do @user = FactoryGirl.create(:user) @page = FactoryGirl.build(:page) @page.creator = @user @page.save @article = FactoryGirl.create(:article) @comment_attributes = FactoryGirl.attributes_for(:comment, :article_id => @article ) end it "populates an array of materials" do get :index, ?? #response.should be_success assigns(:comments) end it "renders the :index view" do get :index, ?? response.should render_template("index") end end 

任何想法如何给页面和文章引用get:index ?? 如果我给:get:index,:article_id => @ article.id
我得到的错误如下:

  Failure/Error: get :index, :article_id => @article.id ActionController::RoutingError: No route matches {:article_id =>"3", :controller=>"magazine/comments"} 

您的路线至少需要两个ID:评论的父文章和文章的父页面。

 namespace :magazine do resources :pages do resources :articles do resources :comments end end end # => /magazine/pages/:page_id/articles/:article_id/comments 

必须提供所有父ID才能使此路由生效:

 it "renders the :index view" do get :index, {:page_id => @page.id, :article_id => @article.id} response.should render_template("index") end 

使用Rails 5,params API改变了:

 get :index, params: { page_id: @page.id, article_id: @article.id } 

https://relishapp.com/rspec/rspec-rails/v/3-7/docs/request-specs/request-spec#specify-managing-a-widget-with-rails-integration-methods