gpt4 book ai didi

javascript - Jest iife 模块测试 - 窗口变量未定义

转载 作者:行者123 更新时间:2023-12-03 00:15:35 24 4
gpt4 key购买 nike

我正在为我拥有的每个单独的模块编写单元测试。这些模块之一是命令队列(以简化脚本的异步加载):

在 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: Cannot read property 'cmd' of undefined

此错误指向 cmd.js 文件中的 iife 参数:}(window.advert.cmd || []));

我首先认为这与需要重命名为全局(在测试中)的窗口对象有关,但即使这样也不会改变错误消息。有任何想法吗?

谢谢

最佳答案

创建一个类似 prepare-environement.js 的文件

global.advert = {};
global.advert.cmd = [];

并在cmd.js之前导入它

import './prepare-environement'
import cmd from './../src/utils/cmd';

关于javascript - Jest iife 模块测试 - 窗口变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54535745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com