У меня проблемы с тестированием действия обновления моего контроллера с помощью Rspec, что я делаю не так? - PullRequest
0 голосов
/ 15 августа 2011

Я пытаюсь проверить сбойную ветвь действия обновления на моем контроллере, но у меня возникли проблемы с тестом.Это то, что у меня есть, и оно терпит неудачу на последнем

describe "PUT 'article/:id'" do
.
.
.
  describe "with invalid params" do
    it "should find the article and return the object" do
      Article.stub(:find).with("1").and_return(@article)
    end

    it "should update the article with new attributes" do
      Article.stub(:update_attributes).and_return(false)
    end

    it "should render the edit form" do
      response.should render_template("edit")
    end
  end
end

Есть какие-либо идеи относительно того, почему последняя часть не отображает шаблон?

Ответы [ 2 ]

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

Вы неправильно разделяете части теста. Каждый it вызов на самом деле является новым примером, и состояние сбрасывается до / после каждого.

Что вы должны делать, это:

describe "with invalid params" do
  before do
    @article = Article.create(valid_params_go_here)
  end

  it "should find the article and return the object" do
    put :update, { :id => @article.id, :article => { :title => "" } }
    response.should render_template("edit")
  end
end

Делая это таким образом, @article устанавливается перед рукой (хотя вы могли бы использовать фиктивный, если вы действительно хотели бы) и запрос к действию update и утверждение что он действительно отображает шаблон edit, все это происходит в одном примере.

0 голосов
/ 21 июня 2018

Для людей, которые приезжают сюда в 2018 году, были сделаны некоторые обновления (каламбур не предназначен). Важно включить «params» перед перечислением параметров. Кроме того, вы должны использовать ожидаемую, а не «следует», поскольку в Rails 6.0 она будет устаревшей.

describe "with invalid params" do
  before(:each) do
    @article = Article.create(valid_params_go_here)
  end

describe "PATCH update/:id" do
  it "should find the article and return the object" do
    put :update, params: { id: @article.id, article: { title: "" } }
    expect(response).to be_redirect
  end
end
...