RSpecing: действие обновления для вложенного ресурса - PullRequest
2 голосов
/ 29 августа 2011

Автор имеет много работ.Работа принадлежит автору.

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's: showдействие?Я что-то упустил?

Я использую унаследованные ресурсы, следовательно, controller.stub (: resource).
Я также заметил, что assign(:work, work) throws undefined method 'assign'?Это работает в представлениях, не должно ли это работать и для контроллеров?

1 Ответ

1 голос
/ 29 августа 2011

Вот что сделал трюк.

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) тоже безуспешно. Похоже, я не очень хорошо понимаю наследуемые_ресурсы.

Комментарии приветствуются.

...