Я пишу библиотеку, которая обрабатывает событие ошибки DOM, и пытаюсь написать модульные тесты для своей библиотеки.
Вот моя первая попытка:
const html = `<!DOCTYPE html>
<html>
<head>
<title>hello</title>
<script>
function crash()
{
console.log('here');
//document.getElementById('abc').innerHTML = 'hello';
throw new Error("Testar");
}
</script>
</head>
<body>
</body>
</html>`;
const dom = new JSDOM(html, {runScripts: "dangerously"});
dom.window.addEventListener('error', function(){console.log('ERROR!!')});
global.window = dom.window;
global.document = dom.window.document;
let actualContext: ContextCollectionProviderContext;
Reporter.instance = {
reportByContext(context) {
actualContext = context;
},
};
describe('DOM error event', () => {
it('should include the document collection', () => {
catchDomErrors(config);
global.window.eval('crash()');
expect(actualContext).to.be('object');
});
});
В моей библиотеке есть обработчик события ошибки, который я только что добавил, чтобы посмотреть, вызывается ли он. Ни один из них.
Я также пытался использовать виртуальную консоль:
const virtualConsole = new VirtualConsole();
virtualConsole.sendTo(console);
virtualConsole.on("error", () => { console.log('ERRRRRROR'); });
virtualConsole.on("jsdomError", (e) => {
console.log(e);
})
const dom = new JSDOM(html, {runScripts: "dangerously", virtualConsole});
Но когда я активирую ее, в консоль ничего не записывается, и ее события ошибок также не вызываются (или, по крайней мере, в консоль ничего не записано).
Я также пытался добавить прослушиватель событий в документ, но это тоже не помогло.
Вывод из теста:
![enter image description here](https://i.stack.imgur.com/2VZn8.png)
Из того, что я прочитал, JSDOM не должен проходить тесты, если есть обработчик событий.
Как я могу использовать JSDOM для проверки обработчика событий ошибок моих библиотек?