assert_difference有一个字符串?

时间:2016-03-03 17:46:07

标签: ruby-on-rails testing

以下是标准insert_difference更新测试:

assert_difference 'Article.count' do
  post :create, article: {...}
end

在测试字符串时,是否可以执行与insert_difference等效的操作?

assert_difference 'Article.name' do
  post :create, article: {...}
end
# TypeError: no implicit conversion of Fixnum into String 

1 个答案:

答案 0 :(得分:2)

这种低技术方式:

assert_equal 'before', Article.name

post :create, article: { ... }

assert_equal 'after', Article.name

如果你想要你可以编写自己的断言方法来包装它,但除非在你的测试中普遍使用它,否则我会避免这样做,它会混淆实际发生的事情。

assert_difference旨在用于返回整数值的方法,仅此而已,但您可以将该设计用作基于字符串的方法的基础。

现在我发现奇怪的是Article.name是一种类方法,所以如果你期望特定的实例发生变化,你需要这样做:

article = articles(:example)

assert_equal 'before', article.name

post :create, article: { ... }

article.reload

assert_equal 'after', article.name

在我试图断言记录的许多测试中,我倾向于看到的内容实际上已经改变了。