RSpecing: действие обновления для вложенного ресурса
У автора много работ. Работа принадлежит автору.
resources :authors do
resources :works
end
И RSpec:
it "should redirect to :show" do
work = FactoryGirl.create(:work)
controller.stub(:resource) { work }
work.should_receive(:update_attributes) { true }
put :update, id: work.id, author_id: work.author.id, work: {}
response.should redirect_to(admin_author_work_path(work.author, work))
end
И ошибка:
Expected response to be a redirect to <http://test.host/admin/authors/353/works/166>
but was a redirect to <http://test.host/admin/authors/353/works>
Почему он не перенаправляет на works_controller: show action? Я что-то пропустил?
Я использую унаследованные ресурсы, следовательно, controller.stub(: ресурс).
Я также заметил, что assign(:work, work) throws undefined method 'assign'
? Это работает в представлениях, не должно ли это работать и для контроллеров?
1 ответ
Решение
Это то, что сделал трюк.
it "should also redirect to :show" do
author = mock_model(Author)
work = mock_model(Work)
Author.stub(:find) { author }
author.stub_chain(:works, :find) { work }
work.should_receive(:update_attributes) { true }
put :update, id: author.id, author_id: work.id, work: {}
response.should redirect_to(admin_author_work_path(author, work))
end
Так что, кажется, я не могу просто заглушить (: ресурс), похоже, что-то еще было нужно. Пробовал с заглушкой (:parent) тоже безуспешно. Похоже, я не очень хорошо понимаю наследуемые_ресурсы.
Комментарии приветствуются.