【发布时间】:2020-10-20 23:37:18
【问题描述】:
我将 jest 26 与 jsdom 16 一起使用,因此理论上我使用 Web 组件进行单元测试所需的一切。
我面临的问题是,当我直接使用 document.createElement 实例化 Web 组件时,我可以让它们工作,但不能通过酶的 mount(),我需要将 Web 组件封装在 React 中的测试用例组件。
我已经知道一些变通方法(在 React 测试中模拟 Web 组件等),但是 1. 这比我想要的要少,而且 2. 我不想模拟所有 Web 组件.
到目前为止,我找不到酶法的补丁/解决方法。有什么想法吗?
describe("Web Component Test", () => {
// Define a small custom Web Component
class Test extends HTMLElement {
connectedCallback() {
this.myChild = document.createElement("div");
this.myChild.className = "the_child";
this.appendChild(this.myChild);
}
}
customElements.define("x-test", Test);
// Try instantiating it with document.createElement() - THIS WORKS
test("createElement x-test", () => {
const c = document.createElement("x-test");
document.body.appendChild(c);
expect(c.childNodes).toHaveLength(1);
});
// Try instantiating it with enzyme/mount() - THIS FAILS
test("mount x-test", () => {
const c = mount(<x-test />).getDOMNode();
expect(c.childNodes).toHaveLength(1); // <-- 0 because connectedCallback() not called
});
});
【问题讨论】:
-
我认为它不支持 Web 组件,我试过这段代码github.com/facebook/jest/pull/9606#issuecomment-604063772,它不支持 LitElement(最流行的 Web 组件库之一)。
标签: jestjs enzyme web-component