Validate_presence_of测试通过时它不应该?

问题描述:

我刚开始使用RSpec和Shoulda-matchers,我认为这里出了问题。Validate_presence_of测试通过时它不应该?

在我的模型中,我有一个像这样验证的成员displayname。

validates :displayname, :presence => false #just for this test. 

在我的天赋,我写了这个

it { should validate_presence_of(:displayname) } 

然而,它的传球。除非我切换不应该失败,否则不应该?

编辑:它似乎只是表现得像我说的验证存在,无论我说的是真还是假。我将其更改为should_not并开始失败,除非我完全删除了存在检查。验证存在的行为是不是使用你传递它的任何布尔值?

是的,你是对的。您可以将任何随机值传递给:存在验证中的关键。这意味着即使您添加了以下任何一项,也会发生在场验证

  1. 验证:姓名,:存在=>假
  2. 验证:姓名,:存在=>真
  3. 验证:姓名,:存在=> '随机'
  4. 验证:姓名,:存在=>零

(也许更可读上述验证方法的版本,validates_presence_of:attr_name,不会引起任何这样的困惑)

我想你的测试数据库没有反映实际的模式。确保每次运行更改数据库的迁移时都更新测试数据库。

rake db:test:prepare

此外,如果你正在运行叉勺,请确保您已经停止,并开始再次它重新加载所有的东西。

+0

没有改变任何东西。看到我的编辑更多细节,但它似乎只是忽略了布尔我通过验证存在,只是总是期待它在那里。 – bdwain 2013-04-20 11:29:12

validates_presence_of在shoulda-matchers中的匹配器不会验证该字段是否有价值。它只验证模型是否存在对其上声明的属性的验证。如果你担心验证是否真的起作用,那么你需要更多的测试。

这就是为什么当您将断言从should更改为should_not时,测试开始失败。