0

我最近遇到了一个我很惊讶以前从未见过的问题。我有这样的课程:

class Foo < ActiveRecord::Base
  belongs_to :bar, inverse_of: :foos
end

class Bar < ActiveRecord::Base
  has_many :foos, inverse_of: :bar
end

我正在使用这样的制造商(我知道这些看起来毫无意义):

Fabricator(:foo, class_name: Foo) do
  bar fabricator: :bar
end

Fabricator(:bar, class_name: Bar) do
end

在测试(RSpec)中我正在做这个存根:

foo = Fabricate(:foo) # I can confirm that both foo and foo.bar are correct here.
Foo.stub(:find_by_id).and_return(foo)

我的问题是在测试中,当Foo.find_by_id被调用时,它会foo正确返回,但它foo.bar是一个 RSpec 模拟,并foo在此错误消息中保存结果:

Mock received unexpected message :marked_for_destruction? with (no args)

如何确保关联也通过存根传递?我找到了这个线程,但不能完全破译它的全部含义。

任何帮助将非常感激!

4

1 回答 1

1

当然,我的问题是后来在我调用的测试中Foo.stub_chain(:bar, :property)foo.bar自然只是一个 RSpec Mock。

于 2014-02-25T14:48:04.693 回答