2011-03-16 19 views
7

Quiero descubrir con BDD faltante: incluir parámetros para el método ActiveRecord :: Base.find. Así que mi idea es tener algo en la especificación de la siguiente manera:Esperar método de llamada y proxy al método original con RSpec

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 

Si asociaciones #child o #other_children no están ansiosos cargado, la expectativa fallara con algo como: "Esperado ActiveRecord :: Base.find que se invoca una vez, pero se invocó 2 veces más con los siguientes argumentos: 1. ...; 2. ... "

¿Alguien sabe si hay algún matcher que funciona así o cómo hacer esto.

Gracias

+0

Tengo el mismo problema. Realmente deseo que haya uno. Útil para las pruebas si es válido? fue invocado en un modelo dependiente o algo así para asegurar que la jerarquía sea validada/guardada. –

+0

posible duplicado de [¿Existe una alternativa menos intrusiva a la de \ Rspec \ 'should \ _receive \ '?] (Http://stackoverflow.com/questions/12159536/is-there-a-less-intrusive-alternative-to-rspecs -debería-recibir) – lulalala

Respuesta

5

Yo creo que tenían el mismo problema here. En su caso particular, haría esto que me parece bastante limpio.

original_method = ActiveRecord::Base.method(:find) 
ActiveRecord::Base.should_receive(:find).once do (*args) 
    original_method.call(*args) 
end 

creo que podría extender la clase Rspec Mocks::MessageExpectation incluir el método and_proxy_to_original_method, no debería ser demasiado difícil, pero no he mirado.

+0

Hmmm ... Me gusta la idea. Verificará eso y regresará con el resultado. Gracias – BurmajaM

Cuestiones relacionadas