5

我对唯一性进行了测试,该测试有效:

it { should validate_uniqueness_of(:name).case_insensitive }

但是,当我尝试对名称进行类似测试时,它失败了

it { should validate_presence_of(:name).allow_blank }    

我收到此错误:undefined methodallow_blank'`

4

2 回答 2

13

根据这个列表,应该没有可以链接到 validate_presence_of 的方法来支持您想要做的事情。在这里查看匹配器的源代码

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

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

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

完整的测试将是

it { should validate_presence_of(:name) }    
it { should allow_value("", nil).for(:name) }
于 2012-07-10T14:05:52.403 回答
0

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

附带说明一下,我从不使用验证方法本身测试模型验证,因为您实际上是在测试错误的东西。我使用相关模型的创建来测试它们,并传递有效或无效的参数。这将在现实条件下更准确地测试模型。

于 2012-07-10T14:11:23.230 回答