我尝试使用javascript加载多个外部js。我有单独的注入逻辑代码。当我加载一个js文件时,意味着测试用例工作正常。但是当我尝试加载多个 js 文件时,测试用例失败了。
主.js
var externalJs = "abcd.js";
function loadJs() {
window.$script(externalJs);
}
function init(domElement) {
loadJs();
}
module.exports = {
init: init
};
测试.js
/* global assert, sinon*/
describe('Test', function () {
var factory = require('main.js');
it('oad the correct js library', function(){
window.$script = sinon.spy();
factory.init();
sinon.assert.calledOnce(window.$script);
});
});
上面的代码工作正常。但是当我尝试加载多个外部文件时,测试用例失败了。
主.js
var externalJs = [ "abcd.js", "xyz.js"];
function loadJs() {
window.$script(externalJs[0], function(){
window.$script(externalJs[1], function(){
});
});
}
function init(domElement) {
loadJs();
}
module.exports = {
init: init
};
测试.js
/* global assert, sinon*/
describe('Test', function () {
var factory = require('main.js');
it('oad the correct js library', function(){
window.$script = sinon.spy();
factory.init();
sinon.assert.calledTwice(window.$script);
});
});
错误详细信息:
expected $script to be called twice but was called once
有任何想法来解决这个问题。
问题是对window.$script
的第一次调用不会调用作为参数提供的函数回调(在这种情况下,对window.$script
的另一个调用)。
与其使用 sinon 间谍,不如尝试使用存根。使用存根,您可以告诉 sinon 自动调用它收到的任何函数参数。
window.$script = sinon.stub();
// configure the stub to automatically call any callbacks supplied
window.$script.yields();