gpt4 book ai didi

javascript - 对 Jasmine spy 的重置调用未返回

转载 作者:行者123 更新时间:2023-12-03 03:10:45 31 4
gpt4 key购买 nike

我正在使用 Jasmine (2.2.0) spy 来查看是否调用了某个回调。

测试代码:

it('tests', function(done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
done();
});
});

这按预期工作。但现在,我添加了第二个级别:

it('tests deeper', function(done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
spy.reset();
return objectUnderTest.someFunction(spy);
}).then(function() {
expect(spy.toHaveBeenCalled());
expect(spy.callCount).toBe(1);
done();
});
});

此测试永远不会返回,因为显然永远不会调用 done 回调。如果我删除行 spy.reset(),测试确实完成,但显然未能达到最后的期望。但是,callCount 字段似乎是undefined,而不是2

最佳答案

在 spy 功能方面,Jasmine 2 的语法与 1.3 不同。请参阅 Jasmine 文档 here .

具体来说,您可以使用 spy.calls.reset();

重置 spy

测试应该是这样的:

// Source
var objectUnderTest = {
someFunction: function (cb) {
var promise = new Promise(function (resolve, reject) {
if (true) {
cb();
resolve();
} else {
reject(new Error("something bad happened"));
}
});
return promise;
}
}

// Test
describe('foo', function () {
it('tests', function (done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
done();
});
});
it('tests deeper', function (done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
spy.calls.reset();
return objectUnderTest.someFunction(spy);
}).then(function () {
expect(spy).toHaveBeenCalled();
expect(spy.calls.count()).toBe(1);
done();
});
});
});

参见 fiddle here

关于javascript - 对 Jasmine spy 的重置调用未返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31539736/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com