Ожидать вызова метода и прокси для исходного метода с 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 метод, не должен быть слишком сложным, но я не смотрел.

Другие вопросы по тегам