我正在为我拥有的每个单独的模块编写单元测试。这些模块之一是命令队列(以简化脚本的异步加载):
在html头中:
<script>
var advert = advert || {};
advert.cmd = advert.cmd || [];
</script>
cmd.js:
let cmd = (function(cmd) {
const queue = cmd;
function _init() {
while(queue.length > 0) {
_next();
}
}
function _next() {
queue.shift().call();
}
function _push(fn) {
console.log('pushing', fn);
if (!fn instanceof Function) {
throw Error('core.cmd - argument not of type Function');
}
queue.push(fn);
_next();
}
return {
'init': _init,
'queue': queue,
'push': _push
}
}(window.advert.cmd || []));
export default cmd;
对于我的单元测试,我有以下内容:
import cmd from './../src/utils/cmd';
beforeAll(() => {
global.advert = {};
global.advert.cmd = [];
});
describe('Given we use a queue', () => {
let functionResult;
beforeEach(() => {
functionResult = 0;
});
describe('When the queue is initialized', () => {
test('It should execute the already contained functions ', () => {
global.advert.cmd = [
function(){functionResult++},
function(){functionResult++}
];
global.advert.cmd = cmd;
global.advert.cmd.init();
expect(functionResult).toBe(2);
});
});
});
运行测试时,出现以下错误消息:
TypeError:无法读取未定义的属性“ cmd”
此错误指向cmd.js文件}(window.advert.cmd || []));
我首先认为这与需要重命名为global(在测试中)的window对象有关,但是即使这样也不会更改错误消息。有任何想法吗?
谢谢
答案 0 :(得分:1)
创建类似prepare-environement.js
的文件
global.advert = {};
global.advert.cmd = [];
并将其导入cmd.js
import './prepare-environement'
import cmd from './../src/utils/cmd';