3

我正在尝试迭代一个对象并在使用 rspec 进行测试时更改其属性。这个想法是测试字符串是否太长(最多 255 个字符)。由于有这么多,我想避免重复代码并迭代对象的属性。

由于这个问题,我提出了以下几点:

[ :city, :email, :first_name, :last_name, :office_name, :street ].each do |attr|
    c.send("#{attr}=", long_string)
    c.errors[attr].should include "is too long (maximum is 255 characters)"
end

但是,控制台说

expected [] to include "is too long (maximum is 255 characters)"

long_string 实际上是 1000 个字符长,所以这不是问题。在相应的模型中,我已经确保上述每个属性的最大长度为 255。我不确定我在分配时是否做错了,或者是否是测试不起作用。

4

2 回答 2

2

挤在c.valid?你的c.sendc.errors陈述之间。

访问之前c.errors

errors在您的模型得到验证之前,该数组为空。通过检查valid?或尝试保存它。

您可以在Validations Rails Guide中找到有关errors数组和验证的更多信息

于 2012-12-31T02:53:38.987 回答
2

我相信,如果您使用ActiveRecorderrors是在触发验证之前不会被填充。

[ :city, :email, :first_name, :last_name, :office_name, :street ].each do |attr|
    c.send("#{attr}=", long_string)
    c.valid? # Run validations by asking is the record is valid
    c.errors[attr].should include "is too long (maximum is 255 characters)"
end
于 2012-12-31T02:53:42.173 回答