RSpec RoutingError для вложенного контроллера - PullRequest
1 голос
/ 15 августа 2011

Я тестирую вложенный контроллер и получаю следующую ошибку:

  1) Checklists::ItemsController index action should render index template
     Failure/Error: get :index, :checklist_id => checklist.id
     ActionController::RoutingError:
       No route matches {:checklist_id=>1, :controller=>"checklists/items"}

В браузере загружается / контрольные списки / 1 / элементы загружаются нормально.

Я что-то упустил вspec?

Маршруты:

  resources :checklists do
    resources :items, :controller => "Checklists::Items"
  end

Контроллер, расположенный в папке пространства имен ( / app / controllers / checklists / items_controller.rb ):

class Checklists::ItemsController < ApplicationController
  respond_to :html, :json

  def index
    @checklist_items = @checklist.items
    respond_with @checklist_items
  end
end

Спецификация ( / spec / controllers / checklists / items_controller_spec.rb ):

describe Checklists::ItemsController do
  let(:user) { Factory :user, :role => 'admin' }
  let(:checklist) { Factory(:checklist) }
  let(:checklist_item) { Factory(:checklist_item) }

  before(:each) do
    sign_in_to(controller, user)
    Checklist.stub(:find => checklist)
  end

  it "index action should render index template" do
    get :index, :checklist_id => checklist.id
    response.should render_template(:index)
  end
end

Обновление: маршруты для элементов контрольного списка

checklist_items GET    /checklists/:checklist_id/items(.:format) {:action=>"index", :controller=>"Checklists::Items"}
                POST   /checklists/:checklist_id/items(.:format) {:action=>"create", :controller=>"Checklists::Items"}
new_checklist_item GET    /checklists/:checklist_id/items/new(.:format) {:action=>"new", :controller=>"Checklists::Items"}
edit_checklist_item GET    /checklists/:checklist_id/items/:id/edit(.:format) {:action=>"edit", :controller=>"Checklists::Items"}
 checklist_item GET    /checklists/:checklist_id/items/:id(.:format) {:action=>"show", :controller=>"Checklists::Items"}
                PUT    /checklists/:checklist_id/items/:id(.:format) {:action=>"update", :controller=>"Checklists::Items"}
                DELETE /checklists/:checklist_id/items/:id(.:format) {:action=>"destroy", :controller=>"Checklists::Items"}

1 Ответ

2 голосов
/ 15 августа 2011

Оказывается, решение проблемы было в маршрутах:

Я изменил

resources :items, :controller => "Checklists::Items"

на

resources :items, :controller => "checklists/items"

, и теперь он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...