Відповіді:
Ви можете використовувати spy.and.returnValues (як Jasmine 2.4).
наприклад
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();
});
});
Існує щось, з чим слід бути обережним, є інша функція, подібне заклинання returnValue
без якої s
, якщо ви це використовуєте, жасмин вас не попередить.
Для старих версій Jasmine ви можете використовувати spy.andCallFake
для Jasmine 1.3 або spy.and.callFake
для Jasmine 2.0, і вам доведеться відстежувати стан "викликається", або шляхом простого закриття, або властивості об'єкта тощо.
var alreadyCalled = false;
spyOn(util, "foo").andCallFake(function() {
if (alreadyCalled) return false;
alreadyCalled = true;
return true;
});
.returnValues
- дві функції, очевидно, різні, але передача кількох аргументів.returnValue
не викликає помилки. Я не хочу визнати, скільки часу я втратив завдяки цьому одному персонажу.