使用 Rails 4/Mongoid,我有一个模型调用MyClass
,其验证定义为:
class MyClass
include Mongoid::Document
...some attributes...
before_validation :prevalidate
def prevalidate
self.required_prop = false if self.required_prop_two
end
validate do |instance|
puts 'VALIDATING'
...some more validation...
end
end
然后我有两个 Rspec 测试,其中只有一个打印“验证”:
# This test fails, and does not print 'VALIDATING'
it 'is an invalid instance' do
instance = Fabricate.build(:my_class)
instance.required_prop = nil
instance.required_prop_two = nil
instance.should have(1).errors_on(:required_props)
end
# This test passes, and prints 'VALIDATING'
it 'is a valid instance' do
instance = Fabricate.build(:my_class)
instance.other_required_prop = nil
instance.should have(1).errors_on(:other_required_prop)
end
我假设validate
在检查这些错误时应该始终运行。但是,它只在测试#2 中运行,从不在测试#1 中运行,我完全不知道如何跳过它。它似乎与设置第二个属性有关,因为当第二个被注释掉时, Test #1 runs validate
。
我知道我的例子很少,但有没有人建议这样的事情怎么会发生?