我最近遇到了一个我很惊讶以前没有见过的问题。我有类似的课程:
class Foo < ActiveRecord::Base
belongs_to :bar, inverse_of: :foos
end
class Bar < ActiveRecord::Base
has_many :foos, inverse_of: :bar
end
我正在使用fabricators(我知道这些看起来毫无意义):
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)
如何确保关联也与存根一起传递?我找到了this thread,但无法完全解读这一切意味着什么。
非常感谢任何帮助!
答案 0 :(得分:1)
当然,我的问题是,在测试的后期我打电话给Foo.stub_chain(:bar, :property)
所以foo.bar
当然只是一个RSpec模拟。