【发布时间】:2020-06-10 09:03:16
【问题描述】:
我知道有人在 number of occasions 上提出过这个问题,尽管自提出这些问题以来环境发生了变化:尤其是 JSDom now supports custom elements。
这些其他问题围绕着寻找替代品(例如使用Happy Dom),因为当时 JSDom 不支持自定义元素。不过既然 JSDom 确实支持自定义元素,那么有没有人有什么资料可以解决下面的错误呢?
TypeError: Class constructor HTMLElement cannot be invoked without 'new' 1 | export default class Foo extends HTMLElement { 2 | constructor() { > 3 | super(); | ^ 4 | 5 | this._clicker = 2; 6 | } at new Foo (__tests__/fooclass.js:3:5) at Object.<anonymous> (__tests__/fooclass.test.js:7:13)
当前设置:
参考 repo 可用here(现已修复):
自定义元素示例
class Foo extends HTMLElement {
constructor() {
super();
this._clicker = 2;
}
connectedCallback() {
this.textContent = 'My Foo Bar Element';
}
get testCallback() {
return 'hello world!';
}
set clicker(num) {
this._clicker = Number(num);
}
get clicker() {
return this._clicker;
}
}
packages.json
{
"scripts": {
"test": "jest --env=jest-environment-jsdom-sixteen"
},
"jest": {
"verbose": true
},
"devDependencies": {
"@babel/preset-env": "^7.8.4",
"babel-plugin-transform-builtin-classes": "^0.6.1",
"jest": "^25.1.0",
"jest-environment-jsdom-sixteen": "^1.0.2"
}
}
.babelrc
{
"presets": ["@babel/preset-env"]
}
【问题讨论】:
标签: unit-testing jestjs babeljs custom-element jsdom