【发布时间】:2018-07-26 08:35:48
【问题描述】:
我编写了一个脚本,主要目的是为某些表格的单元格添加新元素。
测试是这样完成的:
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.addInfo 是mockWPMLCFInfoInit 的真实版本(当然,这是一个模拟方法)。
从上面的测试中,如果添加类似的东西......
const table = element.querySelector(`table`);
var row = table.insertRow(0);
console.log('New row added'); 永远不会被调用。
可以肯定的是,我也尝试在新行中添加所需的单元格。
当然,手动测试告诉我代码有效。
搜了一圈,我的理解是不支持MutationObserver和there is no plan to support it。
很公平,但在这种情况下,我该如何测试我的这部分代码?除了手动,那就是:)
【问题讨论】:
-
您需要创建一个
MutationObserver的模拟实现,它的行为符合您的需要。 -
标签: jestjs