0
我需要在从数据库中检索ActiveRecord模型之前存根。下面是一个简化的例子:尚不存在的RSpec存根对象
model.rb:
class Model < ActiveRecord::Base
def self.first_bar
find(id: 1).bar
end
def bar
'not the value I want'
end
end
model_spec.rb:
let(:model) { Model.create } # => <Model id:1>
before { allow(model).to receive(:bar).and_return('the value I need stubbed') }
it { expect(Model.some_value).to eq('the value I need stubbed') }
显然,这种测试失败的原因是在Model.first_bar
检索的对象是不同的对象比一个被钉住了。
注意事项:
- 因为我使用该模型的其他实例其他地方真正的考验,我不能使用
allow_any_instance_of(Model).to receive(:first_bar)
。 - 我不能使用
allow(Model).to receive(:first).with(id: 1)
,因为在我的用例中,它太脆弱了。
理想情况下,我需要类似allow_any_instance_of(Model).with_attributes(id: 1)
的东西,所以具有这些特定值的任何对象都会被截断。
这似乎是一个X和Y的问题,你能代替告诉使用你想测试,而不是在如何测试它的具体迷路的实际行为? – max
为什么不存根'first_bar'? –