Existe uma alternativa menos intrusiva ao `should_receive` da Rspec?
Ao escrever testes Rspec, muitas vezes sou frustrado comshould_receive
. Eu gostaria de saber se há uma alternativa menos intrusiva.
Por exemplo:
describe "making a cake" do
it "should use some other methods" do
@baker.should_receive(:make_batter)
@baker.make_cake
end
end
A chamada parashould_receive
é uma boa descrição, mas quebra meu código, porqueshould_receive
funciona mascarando o método original emake_cake
não pode continuar a menosmake_batter
na verdade retorna um pouco de massa. Então eu mudo para isso:
@baker.should_receive(:make_batter).and_return(@batter)
Isso é feio porque:
istoparece como se eu estivesse testando issomake_batter
retorna corretamente@batter
, Mas euna realidade forçando a versão falsa demake_batter
para retornar isso.Isso me força a configurar separadamente@batter
E semake_batter
tem quaisquer efeitos colaterais importantes (o que poderia ser um cheiro de código, suponho) eu tenho que fazer com que isso aconteça também.eu desejo queshould_receive(:make_batter)
iria verificar a chamada do método epassá-lo para o método original. Se eu quisesse stub seu comportamento para melhor teste de isolamento, eu faria isso explicitamente:@baker.stub(:make_batter).and_return(@batter)
.
Existe uma maneira de fazer algo comoshould_receive
sem impedir a chamada do método original? O meu problema é um sintoma de design ruim?