Ожидать вызова метода и прокси для исходного метода с RSpec - PullRequest
7 голосов
/ 16 марта 2011

Я хочу обнаружить с отсутствующим 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 Ответ

5 голосов
/ 29 августа 2011

Я думаю У меня была такая же проблема здесь . В вашем конкретном случае я бы сделал это, что я считаю довольно чистым.

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, это не должно быть слишком сложно, но я не смотрел.

...