¿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@batterSimake_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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta