У меня проблемы с выяснением, как заглушить только один из двух вызовов метода. Вот пример:
class Example
def self.foo
{ a: YAML.load_file('a.txt'), # don't stub - let it load
b: YAML.load_file('b.txt') } # stub this one
end
end
RSpec.describe Example do
describe '.foo' do
before do
allow(YAML).to receive(:load_file).with('b.txt').and_return('b_data')
end
it 'returns correct hash' do
expect(described_class.foo).to eq(a: 'a_data', b: 'b_data')
end
end
end
Тест не пройден, потому что я поставил вызов на YAML.load_file
с аргументами для второго вызова ('b.txt'
), а не первого, с которым он сталкивается ('a.txt'
). Я думал, что сопоставление аргументов решит эту проблему, но это не так.
Failures:
1) Example.foo returns correct hash
Failure/Error:
{ a: YAML.load_file('a.txt'),
b: YAML.load_file('b.txt') }
Psych received :load_file with unexpected arguments
expected: ("b.txt")
got: ("a.txt")
Please stub a default value first if message might be received with other args as well.
Есть ли способ, позволяющий разрешить первый вызов на YAML.load_file
, но только заглушить второй вызов? Как бы я это сделал?