我有一个模型(讨论),其中包含另一个模型(可见性)。讨论模型的before_validation :on => :create
调用是在visibility
上设置一个值,即:
class Discussion
has_one :visibility
validates_presence_of :some_unrelated_field
before_validation :set_visibility_relationship, :on => :create
private
def set_visibility_relationship
visibility.some_entity = self.the_same_entity
end
end
然后我在discussion_spec.rb
:
it { should validate_presence_of(:some_unrelated_field) }
before_validation引发错误:
Failure/Error: it { should validate_presence_of :some_unrelated_field }
NoMethodError:
undefined method `visibility.some_entity' for #<Discussion:0x007ff6ebc43170>
如果我为before_validation
电话或should validate_presence_of
注释了无关字段,我的所有测试都会通过。
我尝试使用pry,我发现在discussion.errors上设置的错误键之一是“visibility.some_entity”,而所有其他键都是基于属性的,例如:“some_unrelated_field”。似乎rspec中可能存在一些错误导致抛出此错误,但我也可能做错了。
答案 0 :(得分:0)
看起来它实际上是与shoulda-matcher 2.0.0的问题。升级到2.2.0版解决了这个问题。