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 returnValue
senza s
, se lo usi, jasmine non ti avviserà.
Per le versioni precedenti di Jasmine, puoi utilizzare spy.andCallFake
Jasmine 1.3 o spy.and.callFake
Jasmine 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.returnValue
non genera un errore. Non voglio ammettere quanto tempo ho perso a causa di quel personaggio.