Czy istnieje mniej inwazyjna alternatywa dla `should_receive` Rspec?
Pisząc testy Rspec, często jestem sfrustrowanyshould_receive
. Chciałbym wiedzieć, czy istnieje mniej inwazyjna alternatywa.
Na przykład:
describe "making a cake" do
it "should use some other methods" do
@baker.should_receive(:make_batter)
@baker.make_cake
end
end
Wezwanie doshould_receive
to dobry opis, ale łamie mój kod, ponieważshould_receive
działa poprzez maskowanie oryginalnej metody imake_cake
nie może kontynuować, chyba żemake_batter
faktycznie zwraca jakieś ciasto. Zmieniłem to na to:
@baker.should_receive(:make_batter).and_return(@batter)
To brzydkie, ponieważ:
Towygląda jak testuję tomake_batter
poprawnie zwraca@batter
, ale ja jestemtak właściwie wymuszanie fałszywej wersjimake_batter
aby to zwrócić.Wymusza na mnie osobną konfigurację@batter
Jeślimake_batter
ma jakieś ważne skutki uboczne (co może być zapachem kodu, jak przypuszczam). Muszę też to zrobić.Życzę tegoshould_receive(:make_batter)
zweryfikuje wywołanie metody iprzekaż ją do oryginalnej metody. Gdybym chciał ograniczyć swoje zachowanie do lepszych testów izolacji, zrobiłbym to wyraźnie:@baker.stub(:make_batter).and_return(@batter)
.
Czy istnieje sposób na zrobienie czegoś takiegoshould_receive
bez uniemożliwiania oryginalnego wywołania metody? Czy mój problem jest objawem złego projektu?