RSpec 间谍方法问题

RSpec Spy method issue

it "calls #create if #find_or_create is called and no matching record exists" do
  snack = class_spy(Snack, find_by_name: nil)
  attrs = {name: 'test', location: 'test'}
  snack.find_or_create(attrs)
  expect(snack).to have_received(:create).with(attrs)
end

并在小吃内 class

def self.find_or_create(attrs)
  snack = find_by_name(attrs[:name])
  snack ||= create(attrs)
end

但是 create 似乎没有被调用——我想这是预期的吗?/关于我没有考虑到的任何想法?

我相信,你可以这样做:

it 'whatewer' do
  expect(Snack).to receive(:create).with(attrs)
  Snack.find_or_create(attrs)
end