2017-11-06 27 views
0

javascript를 사용하여 여러 외부 js를로드하려고했습니다. 주입 로직을위한 별도의 코드가 있습니다. 하나의 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

스크립트를 가져올 실제 네트워크 요청이있는 경우 스크립트가로드 될 때까지 기다릴 수 있도록 i- 함수에 콜백 done()을 추가해야합니다. 그런 다음 스크립트가로드되면 테스트에서 호출이 완료됩니다. – William

답변

0

window.$script에 대한 첫 번째 호출은 매개 변수로 제공되는 함수 콜백을 호출하지 않습니다 (이 경우 window.$script에 대한 다른 호출).

스톤 스파이를 사용하는 대신 스텁을 사용해보십시오. 스텁을 사용하면 sinon이 수신 한 모든 함수 매개 변수를 자동으로 호출하도록 지정할 수 있습니다.

window.$script = sinon.stub(); 

// configure the stub to automatically call any callbacks supplied 
window.$script.yields();