rspec - 如何检查allow_blank是否存在

时间:2012-07-10 13:03:06

标签: ruby-on-rails ruby validation activerecord rspec

我对唯一性的测试有效:

it { should validate_uniqueness_of(:name).case_insensitive }

然而,当我尝试对名称进行类似的测试时,它失败了

it { should validate_presence_of(:name).allow_blank }    

我收到此错误:undefined method allow_blank'`

2 个答案:

答案 0 :(得分:10)

根据this list,在shoulda中没有可以链接到validate_presence_of的方法来支持你想要做的事情。 看看the source code of the matcher here

但是,您可以使用另一个匹配器:

it { should allow_value("", nil).for(:name) }

哪个测试是否可以将空值应用于您的属性。

完整的测试将是

it { should validate_presence_of(:name) }    
it { should allow_value("", nil).for(:name) }

答案 1 :(得分:0)

AFAIK,allow_blank没有匹配器,因此您可以使用allow_value(@subject.name.blank?)或类似内容。

作为旁注,我从不使用验证方法本身测试模型验证,因为您实际上正在测试错误的东西。我使用有问题的模型的创建测试它们,传递有效或无效的参数。这将在现实条件下更准确地测试模型。