如何为 Jasmine 间谍的多个调用提供不同的返回值

2022-01-11 00:00:00 unit-testing jasmine javascript

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

Say I'm spying on a method like this:

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

被测函数多次调用util.foo.

是否可以让间谍在第一次调用时返回 true,但第二次返回 false?还是有其他方法可以解决这个问题?

Is it possible to have the spy return true the first time it's called, but return false the second time? Or is there a different way to go about this?

推荐答案

你可以使用spy.and.returnValues(如 Jasmine 2.4).

You can use spy.and.returnValues (as 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不会警告你.

There is some thing you must be careful about, there is another function will similar spell returnValue without s, if you use that, jasmine will not warn you.

相关文章