如何解释此验证测试代码?

时间:2014-01-16 22:41:47

标签: ruby-on-rails ruby

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是否正确?

我们是否只是试图测试产品型号中是否存在所有这些属性?

谢谢大家。

1 个答案:

答案 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属性无效,实际上您检查是否至少有一个错误集。


我个人并不喜欢该测试的方法,因为它部分不完整(你实际上没有测试真正的验证,因此无法理解特定属性为何无效),但它绝对是一个很好的起点。简单的应用。