为什么,他们是教学中如何写测试单元的情况下在此assert_equal声明

为什么,他们是教学中如何写测试单元的情况下在此assert_equal声明

问题描述:

用于在使用Rails书敏捷Web开发括号:为什么,他们是教学中如何写测试单元的情况下在此assert_equal声明

test "product price must be positive" do 
    product = Product.new(title: "By Book 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] 
end 

关于assert_equal声明,为什么周围的需要括号“必须大于...“字符串。我假设变量类型在这里发挥作用,但需要澄清一些原因。

谢谢。

model.errors[:field]总是返回一个字符串数组,即使只有一个错误。

如果声明是在没有[]的情况下完成的,它总会是错误的,因为它会将字符串与数组进行比较。

assert_equal "must be greater than or equal to 0.01", ["must be greater than or equal to 0.01"]  
=> false 

assert_equal ["must be greater than or equal to 0.01"], ["must be greater than or equal to 0.01"] 
=> true 
+0

啊哈!因此,如果该字段有多个错误,assert_equal是否尝试与其他返回的错误找到匹配项,还是只尝试匹配第一个错误? – uberdanzik

+0

如果该字段有多个错误,断言将失败。数组中的所有内容/元素必须相同。 – pjumble

+0

因此,听起来好像有一种更好的方法可以做到这一点,以后我会在书中学习。感谢您帮助我了解类型问题! – uberdanzik