我无法理解我正在阅读的书中的代码块。
以下是代码:
test "product price must be positive" do
product = Product.new(:title => "My 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].join('; ' )
product.price = 0
assert product.invalid?
assert_equal "must be greater than or equal to 0.01", product.errors[:price].join('; ' )
product.price = 1
assert product.valid?
end
形成我得到的ruby文档:
assert_equal (exp,act,msg = nil)
失败,除非exp == act打印两者之间的差异,如果可能的话。
我是正确的假设:assert_equal“必须大于或等于0.01”,
表示:
assert_equal(“必须大于或等于0.01”,,,)#with no act or msg。
另外,有人可以解释下面一行使用什么数组和使用什么?
product.errors [:price] .join(';')
我无法掌握数组的位置以及作者通过加入实现的目标。
提前感谢任何信息。
这本书是:使用Rails第4版进行敏捷Web开发
答案 0 :(得分:2)
完整的断言如下所示:
assert_equal "must be greater than or equal to 0.01" , product.errors[:price].join('; ' )
此处exp = "must be greater than or equal to 0.01"
和act = product.errors[:price].join('; ' )
product.errors[:price]
是一个数组,包含多个错误消息。
将.join(';')
链接到它会使所有错误消息与';'连接在一起作为分隔符。
在这种情况下,只有一个错误("must be greater than or equal to 0.01"
),因此join method只返回相同的值而不添加分隔符。因此断言应该通过。
示例说明join(';')
在这种情况下的行为:
> ['a', 'b'].join(';')
=> "a;b"
> ['a'].join(';')
=> "a"