gpt4 book ai didi

jestjs - 用Jest测试MutationObserver

转载 作者:行者123 更新时间:2023-12-03 23:18:44 27 4
gpt4 key购买 nike

我编写了一个脚本,其主要目的是向某些表格的单元格添加新元素。

测试是通过类似这样的方式完成的:

document.body.innerHTML = `
<body>
<div id="${containerID}">
<table>
<tr id="meta-1"><td> </td></tr>
<tr id="meta-2"><td> </td></tr>
<tr id="meta-3"><td> </td></tr>
<tr id="no-meta-1"><td> </td></tr>
</table>
</div>
</body>
`;

const element = document.querySelector(`#${containerID}`);

const subject = new WPMLCFInfoHelper(containerID);
subject.addInfo();

expect(mockWPMLCFInfoInit).toHaveBeenCalledTimes(3);

所谓的 mockWPMLCFInfoInit就是告诉我该元素已添加到单元格的原因。

当向表中添加新行时,部分代码将使用MutationObserver再次调用 mockWPMLCFInfoInit:
new MutationObserver((mutations) => {
mutations.map((mutation) => {
mutation.addedNodes && Array.from(mutation.addedNodes).filter((node) => {
console.log('New row added');
return node.tagName.toLowerCase() === 'tr';
}).map((element) => WPMLCFInfoHelper.addInfo(element))
});
}).observe(metasTable, {
subtree: true,
childList: true
});
WPMLCFInfoHelper.addInfomockWPMLCFInfoInit的真实版本(当然是模拟方法)。

根据以上测试,如果添加类似的内容...
const table = element.querySelector(`table`);
var row = table.insertRow(0);
console.log('New row added');永远不会被调用。
可以肯定的是,我也尝试过在新行中添加所需的单元格。

当然,手动测试告诉我代码可以正常工作。

到处搜索,我的理解是不支持MutationObserver和 there is no plan to support it

足够公平,但是在这种情况下,如何测试代码的这一部分?除了手动,就是:)

最佳答案

我知道我在这里参加聚会很晚,但是在我的jest设置文件中,我只是添加了以下模拟MutationObserver类。

global.MutationObserver = class {
constructor(callback) {}
disconnect() {}
observe(element, initObject) {}
};

显然,这不允许您测试观察者是否做了您想要的事情,但是将允许其余代码测试运行,这是可行的解决方案的路径。

关于jestjs - 用Jest测试MutationObserver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48809753/

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