¿Existe una alternativa menos intrusiva al `should_receive` de Rspec?
Al escribir pruebas Rspec, a menudo me siento frustrado conshould_receive
. Me gustaría saber si hay una alternativa menos intrusiva.
Por ejemplo:
describe "making a cake" do
it "should use some other methods" do
@baker.should_receive(:make_batter)
@baker.make_cake
end
end
La llamada ashould_receive
Es una buena descripción, pero rompe mi código, porqueshould_receive
trabaja enmascarando el método original, ymake_cake
no puede continuar a menos quemake_batter
En realidad devuelve un poco de bateador. Así que lo cambio a esto:
@baker.should_receive(:make_batter).and_return(@batter)
Esto es feo porque:
Esomiradas como si estuviera probando esomake_batter
devuelve correctamente@batter
, pero soyactualmente forzando la versión falsa demake_batter
para devolver esoMe obliga a configurar por separado@batter
Simake_batter
tiene algún efecto secundario importante (que podría ser un olor a código, supongo). También tengo que hacer que eso suceda.me gustaría queshould_receive(:make_batter)
verificaría el método de llamada ypásalo al método original. Si quisiera rechazar su comportamiento para una mejor prueba de aislamiento, lo haría explícitamente:@baker.stub(:make_batter).and_return(@batter)
.
¿Hay una manera de hacer algo comoshould_receive
¿Sin impedir la llamada al método original? ¿Es mi problema un síntoma de mal diseño?