Ожидать вызова метода и прокси для исходного метода с RSpec
Я хочу обнаружить с отсутствующим BDD: включить параметры для ActiveRecord::Base.find метод. Так что моя идея состоит в том, чтобы иметь в спецификации что-то вроде этого:
ActiveRecord::Base.should_receive(:find).once.and_proxy_to_original_method
parent = SomeClass.find 34
parent.child.should be_loaded
parent.other_children.should be_loaded
Если ассоциации #child или #other_children не загружены с нетерпением, ожидание должно завершиться неудачно с чем-то вроде: "Ожидается, что ActiveRecord::Base.find будет вызван один раз, но он был вызван еще 2 раза со следующими аргументами: 1. ...; 2. ..."
Кто-нибудь знает, есть ли какой-нибудь сопоставитель, который работает так или как это сделать.
Спасибо
1 ответ
Я думаю, что у меня была такая же проблема здесь. В вашем конкретном случае я бы сделал это, что я считаю довольно чистым.
original_method = ActiveRecord::Base.method(:find)
ActiveRecord::Base.should_receive(:find).once do (*args)
original_method.call(*args)
end
Я полагаю, вы могли бы расширить Rspec Mocks::MessageExpectation
класс, чтобы включить and_proxy_to_original_method
метод, не должен быть слишком сложным, но я не смотрел.