Dans l'écriture des tests Rspec, je suis souvent frustré should_receive
. Je voudrais savoir si il y a un moins perturbateur.
Par exemple:
describe "making a cake" do
it "should use some other methods" do
@baker.should_receive(:make_batter)
@baker.make_cake
end
end
L'appel à l' should_receive
est une bonne description, mais il casse mon code, car should_receive
œuvres de masquage de la méthode originale, et make_cake
ne peuvent se faire sans make_batter
renvoie en fait certains de la pâte. J'ai donc changer à cela:
@baker.should_receive(:make_batter).and_return(@batter)
C'est moche parce que:
- Il regarde comme je suis en essais qu'
make_batter
correctement les retours@batter
, mais je me suis fait forcer la fausse version de l'make_batter
de retour. - Il me force à créé séparément
@batter
- Si
make_batter
a des effets secondaires importants (qui peut être une odeur de code, je suppose), je dois faire ces se produire.
Je souhaite que should_receive(:make_batter)
permettrait de vérifier l'appel de la méthode et de la transmettre à la méthode d'origine. Si je voulais stub son comportement pour une meilleure isolation de test, je le ferais de manière explicite: @baker.stub(:make_batter).and_return(@batter)
.
Est-il un moyen de faire quelque chose comme should_receive
sans empêcher l'origine de l'appel de méthode? Est mon problème, un symptôme de la mauvaise conception?