0

我有一个模型(讨论),它包含另一个模型(可见性)。需要在before_validation :on => :create上设置值的 Discussion 模型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 逐步完成,我发现在讨论中设置的错误键之一是“visibility.some_entity”,而所有其他键都是基于属性的,例如:“some_unrelated_field”。似乎 rspec 中可能存在一些错误导致抛出此错误,但我也可能做错了什么。

4

1 回答 1

0

看起来这实际上是 shoulda-matchers 2.0.0 的问题。升级到 2.2.0 版解决了这个问题。

于 2013-06-25T14:44:24.427 回答