【发布时间】:2021-11-04 19:34:03
【问题描述】:
任何人都有一个很好的设置来测试带有 jest、jsdom 或类似的自定义元素?我一直在使用 Puppeteer 和 Selenium,但是它们太慢了测试运行。 jsdom 的任何其他替代方案或修复程序可以使以下测试可运行吗?
import {LitElement} from 'lit-element';
import {html} from 'lit-html';
export class Counter extends LitElement {
static get properties() {
return Object.assign({}, super.properties, {
count: {type: Number}
});
}
render() {
return html`Count is ${this.count}`;
}
}
customElements.define('c-counter', Counter);
带测试文件:
import './counter';
describe('c-counter', () => {
it('should be registered', () => {
expect(customElements.get('c-counter')).toBeDefined();
});
it('render', async () => {
const element = window.document.createElement('c-counter');
window.document.body.appendChild(element);
await element.updateComplete;
expect(element.innerHTML).toContain('Count is undefined');
element.count = 3;
await element.updateComplete;
expect(element.innerHTML).toContain('Count is 3');
});
});
最后这是当前的 jest 环境设置:
const {installCommonGlobals} = require('jest-util');
const {JSDOM, VirtualConsole} = require('jsdom');
const JSDOMEnvironment = require('jest-environment-jsdom');
const installCE = require('document-register-element/pony');
class JSDOMCustomElementsEnvironment extends JSDOMEnvironment {
constructor(config, context) {
super(config, context);
this.dom = new JSDOM('<!DOCTYPE html>', {
runScripts: 'dangerously',
pretendToBeVisual: true,
VirtualConsole: new VirtualConsole().sendTo(context.console || console),
url: 'http://jsdom'
});
/* eslint-disable no-multi-assign */
const global = (this.global = this.dom.window.document.defaultView);
installCommonGlobals(global, config.globals);
installCE(global.window, {
type: 'force',
noBuiltIn: false
});
}
teardown() {
this.global = null;
this.dom = null;
return Promise.resolve();
}
}
module.exports = JSDOMCustomElementsEnvironment;
【问题讨论】:
-
如果您分享错误是什么会很有帮助。而且由于很少有人(如果有的话)在 Jest 中运行 Web 组件测试,我可能会尝试在 repo 或 gist 中进行复制以供人们尝试。
-
在 jsdom 支持自定义元素和 JS 模块之前,我不认为这会很好。鉴于 Web 组件使用大量 DOM API,我认为在真实浏览器中进行测试是更为谨慎的方法。您应该在您支持的所有实际浏览器中进行测试。
-
我完全同意贾斯汀的观点...如果您在使用真实浏览器设置测试方面需要任何帮助,请查看此处open-wc.org/testing - 这应该很简单,并且可以为您提供大部分您在真实浏览器中从 Jest 中了解的功能
-
@JustinFagnani,我正在寻找一个好的堆栈来测试 vanilla webcomponents(你会在这里找到我关于这个主题的几个问题)。您说“很少有人在 Jest 中运行 Web 组件测试”。你知道赞成/反对使用 Jest 来测试 web 组件吗?不要误会我的意思,只是说“很少有人使用......”并没有多大帮助(你会发现很多人说没有多少人使用 web 组件。我使用 Polymer 取得了相当大的成功,现在我正在尝试香草网络组件)。 “很少/很多/很多/等等并没有增加太多,但如果你能很快指出为什么不呢
-
我自己也遇到了这个问题
标签: polymer jestjs web-component jsdom lit-element