2017-11-06 17 views
0

javascriptを使用して複数の外部jをロードしようとしました。私は注入論理のために別々のコードを持っていました。 1つのjsファイルをロードすると、テストケースが正常に動作していることを意味します。 しかし、複数のjsファイルをロードしようとすると、テストケースが失敗しました。複数のネストされた関数を持つSinon、Chaiテストケース

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 

は、この問題を修正するための任意のアイデアを持っています。

+0

スクリプトを取得する実際のネットワーク要求がある場合は、テストがスクリプトの読み込みを待つようにするために、it関数にコールバックdone()を追加する必要があります。スクリプトがロードされると、テストで完了したコール – William

答えて

0

window.$scriptへの最初の呼び出しでは、パラメータとして提供される関数コールバック(この場合はwindow.$scriptへの別の呼び出し)は呼び出されません。

サイロンスパイを使用する代わりに、スタブを使用してみてください。スタブを使用すると、受け取った関数パラメータを自動的に呼び出すことができます。

window.$script = sinon.stub(); 

// configure the stub to automatically call any callbacks supplied 
window.$script.yields(); 
関連する問題