class ProductTest < ActiveSupport::TestCase
test "product attributes must not be empty" do
product = Product.new
assert product.invalid?
assert product.errors[:title].any?
assert product.errors[:description].any?
assert product.errors[:price].any?
assert product.errors[:image_url].any?
end
end
大家好。我是Ruby on Rails的新手,我正在尝试创建一个简单的在线书店。我有一个需要测试的产品型号。我试图用“英语”来理解这段代码,但我很困惑。那么,模型需要包含:title,:description,:price,:image_url是否正确?
我们是否只是试图测试产品型号中是否存在所有这些属性?
谢谢大家。
答案 0 :(得分:1)
测试假设Product
模型已经有一些验证。
测试从
开始product = Product.new
您在哪里创建新产品。然后,您首先触发调用invalid?
的验证,如果实例无效,则返回true并填充errors
列表。
product.invalid?
如果参数的结果为false,则断言之前使测试失败。在这种情况下,参数是验证的结果。
assert(product.invalid?)
如果product.invalid?
返回false,则表示产品有效,这意味着未进行验证,这不是您所期望的。
然后代码检查预期会出错的每个属性,以查看是否设置了错误。
product.errors
包含错误列表,其中键是无效属性,值是数组,如果属性有效,则为nil。
assert product.errors[:description].any?
例如意味着您希望description属性无效,实际上您检查是否至少有一个错误集。
我个人并不喜欢该测试的方法,因为它部分不完整(你实际上没有测试真正的验证,因此无法理解特定属性为何无效),但它绝对是一个很好的起点。简单的应用。