Validate_presence_of测试传递的时间不应该?

时间:2013-04-20 11:14:58

标签: ruby-on-rails rspec shoulda

我刚开始使用RSpec和Shoulda-matchers,我觉得这里出了问题。

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

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

在我的规范中,我写了这个

it { should validate_presence_of(:displayname) }

然而它正在过去。除非我不应该切换,否则不应该失败?

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

3 个答案:

答案 0 :(得分:1)

是的,你是对的。您可以在验证中将任意随机值传递给:presence 键。这意味着即使您添加以下任何内容,也会进行状态验证。

  1. 验证:name,:presence =>假
  2. 验证:name,:presence =>真
  3. 验证:name,:presence => '随机'
  4. 验证:name,:presence =>零
  5. (或许上述验证方法的可读性更强, validates_presence_of:attr_name ,不会造成任何此类混淆)

答案 1 :(得分:1)

在shoulda-matcher中的validates_presence_of匹配器不会对字段进行验证,以查看它是否具有值。它仅验证模型是否对其上声明的属性的存在进行了验证。如果您担心验证是否真的有效,那么您需要进行更多测试。

这就是当您将断言从should更改为should_not时测试开始失败的原因。

答案 2 :(得分:0)

我猜你的测试数据库没有反映出实际的架构。每次运行更改数据库的迁移时,请确保已更新测试数据库。

rake db:test:prepare

另外,如果您正在运行spork,请确保已将其停止并再次启动以重新加载所有内容。