使用Ruby on Rails了解Test :: Unit中的assert_equal

时间:2013-06-06 01:12:09

标签: ruby-on-rails ruby unit-testing testing assert

我有以下代码:

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

为什么这个测试通过?

2 个答案:

答案 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