Сбой RSpec, потому что фактическое перенаправление имеет флэш-сообщение - PullRequest
1 голос
/ 29 апреля 2011

ThingsController:

...

respond_to do |format|
  format.html {redirect_to(:action => "new", :notice => "its a good thing!")}  # suspect...
end

Когда я тестирую этот код

  it "should redirect to /employees/new with a success notice" do
    post :create, :employee => Factory.build(:employee).attributes
    response.should redirect_to(:action => "new")
    flash[:notice].should_not be_nil
  end

Тест не пройден, поскольку он НЕ ожидает фактического перенаправленияуведомление.

Есть предложения?

Ответы [ 2 ]

13 голосов
/ 29 апреля 2011

Да, у меня есть предложение: тестировать разные вещи в разных строках.

response.should redirect_to(new_thing_path)
flash[:notice].should eql("its a good thing!")

Таким образом, если redirect_to не удастся, он потерпит неудачу в этой строке, а если flash[:notice] сломается, топотерпит неудачу в этой строке.

Кроме того, ваш тест должен работать.

7 голосов
/ 28 марта 2012

Я знаю, что вы уже приняли ответ, но я хотел бы дать более подробную информацию по этому вопросу здесь.Настоящая причина, по которой ваш исходный код дал сбой, заключается в том, что:

redirect_to(:action => "new", :notice => "its a good thing!")

по сути такой же, как этот:

url = url_for(:action => "new", :notice => "its a good thing!")
redirect_to(url)

В приведенном выше примере легче увидеть, что значение url будет предполагать, что :notice - это параметр, который вы пытаетесь передать как часть URL.То, что вы пытаетесь сделать, это передать :notice в качестве опции redirect_to, но она объединяется с другими вашими опциями хэширования для формирования URL.

Вот два (непроверенных) решения, которые нужно попробовать:

redirect_to({:action => "new"}, {:notice => "its a good thing!"})

или:

redirect_to(url_for(:action => "new"), :notice => "its a good thing!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...