我刚开始使用RSpec和Shoulda-matchers,我觉得这里出了问题。
在我的模型中,我有一个成员,displayname,这样验证。
validates :displayname, :presence => false #just for this test.
在我的规范中,我写了这个
it { should validate_presence_of(:displayname) }
然而它正在过去。除非我不应该切换,否则不应该失败?
编辑:它似乎只是表现得像我说要验证存在,无论我说的是真还是假。我将其更改为should_not并开始失败,除非我完全删除了状态检查。验证存在的行为是否只是不使用你传递的任何bool?
答案 0 :(得分:1)
是的,你是对的。您可以在验证中将任意随机值传递给:presence 键。这意味着即使您添加以下任何内容,也会进行状态验证。
(或许上述验证方法的可读性更强, validates_presence_of:attr_name ,不会造成任何此类混淆)
答案 1 :(得分:1)
在shoulda-matcher中的validates_presence_of
匹配器不会对字段进行验证,以查看它是否具有值。它仅验证模型是否对其上声明的属性的存在进行了验证。如果您担心验证是否真的有效,那么您需要进行更多测试。
这就是当您将断言从should
更改为should_not
时测试开始失败的原因。
答案 2 :(得分:0)
我猜你的测试数据库没有反映出实际的架构。每次运行更改数据库的迁移时,请确保已更新测试数据库。
rake db:test:prepare
另外,如果您正在运行spork,请确保已将其停止并再次启动以重新加载所有内容。