assert_equal语法

时间:2013-03-15 18:29:21

标签: ruby-on-rails ruby

我无法理解我正在阅读的书中的代码块。

以下是代码:

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开发

1 个答案:

答案 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"