Очаквайте извикване на метод и прокси към оригиналния метод с RSpec

Искам да открия с BDD липсващи :include параметри за 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. ..."

Някой знае ли дали има някакъв мач, който работи по този начин или как да го направя.

Благодаря


person BurmajaM    schedule 16.03.2011    source източник
comment
Имам същия проблем. Наистина ми се иска да имаше такъв. Полезно ли е за тестване, ако е валидно? беше извикан на зависим модел или нещо друго, за да се гарантира, че йерархията е валидирана/запазена.   -  person Dmitriy Likhten    schedule 21.07.2011
comment
възможен дубликат на Има ли по-малко натрапчива алтернатива на Rspec's ` трябва да_получава`?   -  person lulalala    schedule 17.03.2014


Отговори (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, не би трябвало да е твърде трудно, но не съм търсил.

person Joao Tavora    schedule 29.08.2011
comment
Хмм... Харесва ми идеята. Ще провери това и ще се върне с резултат. Благодаря - person BurmajaM; 05.09.2011