在Minitest中测试更新操作

时间:2015-08-31 12:05:45

标签: ruby-on-rails ruby-on-rails-4 minitest

我测试了create

  test "should create article" do
    assert_difference('Article.count') do
      post :create, article: {title: "Test", body: "Test article."}
    end
    assert_redirected_to article_path(assigns(:article))
  end

我想为update行动执行类似的操作。

我的update操作如下:

  def update 
    @article = Article.find(params[:id])

    if @article.update(article_params)
      redirect_to @article
    else
      render 'edit'
    end
  end

我正在考虑类似的事情:

  test "should update article" do
    patch :update, article {title: "Updated", body: "Updated article."}
  end

但我的问题是:如何检查我的文章是否在Minitest中更新?以及如何找到我要更新的项目?在灯具中我有两篇文章。

1 个答案:

答案 0 :(得分:1)

您应该能够将一个fixture文章分配给变量并在更新后的文章上运行断言,类似这样(我没有测试过这段代码,只是为了说明测试结构​​):

test "should update article" do
  article = articles(:article_fixture_name)
  updated_title = "Updated"
  updated_body = "Updated article."

  patch :update, article: { id: article.id, title: updated_title, body: updated_body }

  assert_equal updated_title, article.title
  assert_equal updated_body, article.body
end

您可能希望在article方法中将setup初始化为实例变量,并在nil方法中将其设置为teardown,或者您正在管理设置/拆解以确保您的起始状态在测试之间保持一致。