我在閱讀「使用Rails進行敏捷Web開發」,我無法理解單元測試。Ruby on Rails:編寫正確的單元測試
有這樣定義的模型:
class Product < ActiveRecord::Base
# .....
validates :price, numericality: {greater_than_or_equal_to: 0.01}
# .....
end
而且測試:
test "product price must be positive" do
product = Product.new(
title: "my title",
description: "yyy",
image_url: "zzz.jpg",
)
product.price = -1
assert product.invalid?
assert_equal ["must be greater than or equal to 0.01"],
product.errors[:price]
product.price = 0
assert product.invalid?
assert_equal ["must be greater than or equal to 0.01"],
product.errors[:price]
product.price = 1
assert product.valid?
end
爲什麼我們需要這樣的:
assert_equal ["must be greater than or equal to 0.01"],
product.errors[:price]
爲什麼比較錯誤訊息?而不是寫這樣的測試:
product.price = -1
assert product.invalid?, "must be greater than or equal to 0.01"
product.price = 0
assert product.invalid?, "must be greater than or equal to 0.01"
硬編碼錯誤信息僅供初學者快速掌握。在同一章節(7. TASK B :)中,作者已將此硬編碼消息更改爲:assert_equal [I18n.translate('errors.messages.taken')], product.errors [:title] –