我有以下代码:
test "unique title" do
product = Product.new(title: products(:ruby).title,
description: 'yyy',
price: 1,
image_url: "fred.gif")
assert !product.save
puts product.errors[:title].join('; ')
assert_equal "has already been taken", product.errors[:title].join('; ')
end
测试通过。但我不明白为什么assert_equal不会触发错误。
因为“已经被采取”不等于:ProductTest#test_unique_titlehas already been taken
这是puts语句的输出。
为什么这个测试通过?
答案 0 :(得分:2)
我认为你很困惑因为你的输出中没有新行。 ProductTest#test_unique_title描述了您正在运行且已经采用的测试方法是您的测试结果,因此测试应该通过
答案 1 :(得分:1)
完全不在你的问题中。但是您不必保存记录以检查其是否有效。你可以打电话有效吗?填充错误的方法。
test "unique title" do
product = Product.new(title: products(:ruby).title,
description: 'yyy',
price: 1,
image_url: "fred.gif")
assert !product.valid?
assert_equal "has already been taken", product.errors[:title].join('; ')
end