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
次に、2 つの Rspec テストがあり、そのうちの 1 つだけが「VALIDATING」と出力されます。
# 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 では実行されません。これをスキップする方法については完全に困惑しています。2番目のプロパティがコメントアウトされている場合、テスト#1が実行されるため、その2番目のプロパティの設定に関連しているようvalidate
です。
私の例がまばらであることは知っていますが、このようなことがどのように起こるかについて誰か提案がありますか?