如何为茉莉花间谍的多个调用设置不同的返回值

2022-08-30 04:41:44

假设我正在监视这样的方法:

spyOn(util, "foo").andReturn(true);

受测函数调用多次。util.foo

是否有可能让间谍在第一次被调用时返回,但第二次返回?还是有不同的方法可以做到这一点?truefalse


答案 1

您可以使用 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();
  });
});

有些事情你必须小心,还有另一个功能会类似的咒语没有,如果你使用那个,茉莉花不会警告你。returnValues


答案 2

对于较旧版本的 Jasmine,您可以使用 spy.andCallFake for Jasmine 1.3 或 spy.and.callFake for Jasmine 2.0,并且您必须通过简单的闭包或对象属性等来跟踪“被调用”状态。

var alreadyCalled = false;
spyOn(util, "foo").andCallFake(function() {
    if (alreadyCalled) return false;
    alreadyCalled = true;
    return true;
});