迭代模型属性并检查错误消息

时间:2012-12-31 02:48:22

标签: ruby-on-rails ruby rspec attributes bdd

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

感谢this question

,我想出了以下建议
[ :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.我不确定在分配时是否做错了,或者它是否与测试不起作用。< / p>

2 个答案:

答案 0 :(得分:2)

c.valid?c.send语句之间挤压c.errors

即。 之前访问c.errors

errors数组为空,直到验证模型为止。通过检查valid?或尝试保存它。

您可以在Validations Rails Guide

中找到有关errors数组和验证的详情

答案 1 :(得分:2)

我相信,如果您使用ActiveRecord,则在触发验证之前不会填充errors

[ :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