0

我尝试使用 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

有任何想法来解决这个问题。

4

1 回答 1

0

问题是第一次调用window.$script不调用作为参数提供的函数回调(在这种情况下是另一个调用window.$script)。

尝试使用存根,而不是使用 sinon spy。使用存根,您可以告诉 sinon 自动调用它接收到的任何函数参数。

window.$script = sinon.stub();

// configure the stub to automatically call any callbacks supplied
window.$script.yields();
于 2017-11-08T16:50:59.753 回答