Использование musta redirect_to для проверки действия контроллера на создание - PullRequest
2 голосов
/ 12 февраля 2011

Я использую RSpec + Shoulda для тестирования моего контроллера RESTful в Rails 3. У меня проблемы с выяснением, как проверить перенаправление действия create. Стандартный контроллер RESTful должен перенаправить действие show для нового сообщения. Например, если у меня есть ProjectsController для модели проекта, то при успешном создании это действие должно:

redirect_to project_url(@project)

Следует для этого использовать удобный макрос redirects_to. Вот что я попробовал:

describe ProjectsController, '#create' do
  context "Anonymous user" do
    before :each do
      @attrs = Factory.attributes_for(:project_with_image)
      post :create, :project => @attrs
    end
    it { should assign_to(:project) }
    it { should respond_with(:redirect) }
    it { should redirect_to(@project) }
  end
end

(Да, я использую FactoryGirl, но поскольку в этом случае я использую его только для атрибутов, это не должно иметь значения. Я думаю.)

Как мне указать последний тест там? Это должно redirect_to (...) что? Я пробовал @project, project_url (@project) .. Но я не могу понять это.

Глядя на код сопоставления musta, я заметил, что сопоставитель redirect_to может принять блок. Но я не уверен, как получить доступ к недавно созданному объекту @project в этом блоке ...

Есть мысли?

1 Ответ

5 голосов
/ 13 февраля 2011

Не пробовал, но проблема, вероятно, в том, что @project недоступен в вашей спецификации. Как насчет

it {should redirect_to(Project.last) }
или
it {should redirect_to(assigns(:project)) }
?
...