Я понимаю, что этот вопрос задавался несколько раз, хотя среда изменилась с тех пор, как были заданы эти вопросы: в частности, JSDom теперь поддерживает пользовательские элементы.
Эти другие вопросы касались поиска альтернатив (например, использования 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)
Текущая настройка:
Эталонное репо доступно здесь (теперь исправлено):
Пример нестандартного элемента
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"]
}