我正在尝试迭代一个对象并在使用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.我不确定在分配时是否做错了,或者它是否与测试不起作用。< / p>
答案 0 :(得分:2)
在c.valid?
和c.send
语句之间挤压c.errors
。
即。 之前访问c.errors
errors
数组为空,直到验证模型为止。通过检查valid?
或尝试保存它。
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