gpt4 book ai didi

jestjs - Jest不能处理insertAdjacentElement吗?

转载 作者:行者123 更新时间:2023-12-02 23:43:28 27 4
gpt4 key购买 nike

我想测试一个非常简单的JS函数

export function displaySpinner() {
const loadingOverlayDOM = document.createElement('DIV');
const spinner = document.createElement('IMG');

loadingOverlayDOM.id = 'overlay-spinner';
loadingOverlayDOM.className = 'content-overlay';
spinner.className = 'is-spinning';
spinner.setAttribute('src', '/assets/img/svg/icons/spinner.svg');
l loadingOverlayDOM.insertAdjacentElement('beforeend', spinner);
document.body.insertAdjacentElement('beforeend', loadingOverlayDOM);
}

使用这个(为了解决这个问题而精简的)Jest 测试代码:

test('displaySpinner displays the spinner overlay in the current page', () => {
utils.displaySpinner();
});

但是测试运行对我大喊大叫:

FAIL  app/helper/utils.test.js
● utils › displaySpinner displays the spinner overlay in the current page

TypeError: loadingOverlayDOM.insertAdjacentElement is not a function

at Object.displaySpinner (app/helper/utils.js:185:439)
at Object.<anonymous> (app/helper/utils.test.js:87:15)
at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
at process._tickCallback (internal/process/next_tick.js:109:7)

这是 Jest 中的错误还是我在这里遗漏了什么?

最佳答案

我终于自己找到了答案:

Jest 使用 jsdom,但尚不支持 DOM 函数 insertAdjacentElement(请参阅 this issue on GitHub and it's references)。所以我必须等到 jsdom 实现它或者在我的 JS 中使用其他方法。

您可以通过安装相应的模块将 jsdom 的默认版本替换为最新版本(例如 14 ):

npm install --save-dev jest-environment-jsdom-fourteen

或使用 yarn :

yarn add jest-environment-jsdom-fourteen --dev

然后使用 jest testEnvironment 配置参数:

{
"testEnvironment": "jest-environment-jsdom-fourteen"
}

请注意,如果您使用 --env=jsdom 参数启动 jest,这将覆盖配置文件,因此您需要将其删除。

关于jestjs - Jest不能处理insertAdjacentElement吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45833331/

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