簡體   English   中英

Sinon,Chai測試用例具有多個嵌套功能

[英]Sinon, Chai test case with multiple nested functions

我試圖使用JavaScript加載多個外部js。 我有用於注入邏輯的單獨代碼。 當我加載一個js文件時,意味着測試用例工作正常。 但是,當我嘗試加載多個js文件時,測試用例失敗。

Main.js

var externalJs = "abcd.js";
function loadJs() {
  window.$script(externalJs);
}
function init(domElement) {
  loadJs();
}

module.exports = {
  init: init
};

Test.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);

  });
});

上面的代碼工作正常。 但是,當我嘗試加載多個外部文件時,測試用例失敗。

Main.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
};

Test.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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM