2012-09-28 14 views
5

tengo algo de código Ruby que se parece a esto:RSpec - uso doble prueba como argumento bloque

Something.create do |x| 
    x.foo = bar 
end 

me gustaría escribir una prueba que utiliza un doble en lugar del argumento bloque de x, de modo que Entonces puedo llamar a:

x_double.should_receive(:foo).with("whatever"). 

¿Esto es posible?

Respuesta

8
specify 'something' do 
    x = double 
    x.should_receive(:foo=).with("whatever") 
    Something.should_receive(:create).and_yield(x) 
    # call the relevant method 
end 
+0

¡Excelente! Gracias – stubotnik

+3

Es una buena respuesta, pero me gustaría criticar. 'Something.should_receive (: create)' es una prueba, una afirmación, pero no afirma el comportamiento que stubotnik dijo que quería probar. Así que diferenciaría la configuración de prueba del comportamiento bajo prueba mediante el uso de 'Something.stub (: create) .and_return (x)' que no afirma nada sobre el comportamiento de 'Something.create' –