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
이 문제를 해결하기 위해 어떤 생각을 가지고.
스크립트를 가져올 실제 네트워크 요청이있는 경우 스크립트가로드 될 때까지 기다릴 수 있도록 i- 함수에 콜백 done()을 추가해야합니다. 그런 다음 스크립트가로드되면 테스트에서 호출이 완료됩니다. – William