如何为茉莉花间谍的多个调用设置不同的返回值
2022-08-30 04:41:44
假设我正在监视这样的方法:
spyOn(util, "foo").andReturn(true);
受测函数调用多次。util.foo
是否有可能让间谍在第一次被调用时返回,但第二次返回?还是有不同的方法可以做到这一点?true
false
假设我正在监视这样的方法:
spyOn(util, "foo").andReturn(true);
受测函数调用多次。util.foo
是否有可能让间谍在第一次被调用时返回,但第二次返回?还是有不同的方法可以做到这一点?true
false
您可以使用 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
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;
});