0

我有以下代码:

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 语句的输出。

为什么这个测试会通过?

4

2 回答 2

2

我认为您感到困惑,因为您的输出中不知何故没有新行。ProductTest#test_unique_title 描述了您正在运行并且已经采用的测试方法是您的 puts 的结果,因此测试应该通过

于 2013-06-06T01:42:58.573 回答
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
于 2013-06-06T03:31:04.523 回答