Risposte:
Puoi usare spy.and.returnValues (come Jasmine 2.4).
per esempio
describe("A spy, when configured to fake a series of return values", function() {
beforeEach(function() {
spyOn(util, "foo").and.returnValues(true, false);
});
it("when called multiple times returns the requested values in order", function() {
expect(util.foo()).toBeTruthy();
expect(util.foo()).toBeFalsy();
expect(util.foo()).toBeUndefined();
});
});
C'è qualcosa a cui devi stare attento, c'è un'altra funzione che farà un incantesimo simile returnValuesenza s, se lo usi, jasmine non ti avviserà.
Per le versioni precedenti di Jasmine, puoi utilizzare spy.andCallFakeJasmine 1.3 o spy.and.callFakeJasmine 2.0 e dovrai tenere traccia dello stato "chiamato", tramite una semplice chiusura o proprietà dell'oggetto, ecc.
var alreadyCalled = false;
spyOn(util, "foo").andCallFake(function() {
if (alreadyCalled) return false;
alreadyCalled = true;
return true;
});
.returnValues- le due funzioni sono ovviamente diverse, ma passare più argomenti a.returnValuenon genera un errore. Non voglio ammettere quanto tempo ho perso a causa di quel personaggio.