如何在 Jest 中抑制 JSDOM 错误?

jkt*_*vis 10 jsdom jestjs sweetalert2

我遇到一个问题,第三方库正在使用 JSDOM 中不可用的一些有效的 CSS 解析器功能,我只想抑制此类错误。但考虑到我通过 Jest 使用 JSDOM,我不太确定如何做到这一点。我查看了testEnvironmentOptionsJest 文档中的 ,但我不知道要设置哪些选项。

错误消息基本上如下:

Error: Could not parse CSS stylesheet
    at exports.createStylesheet (node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js:35:21)
    at HTMLStyleElementImpl._updateAStyleBlock (node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:68:5)
    at HTMLStyleElementImpl._childTextContentChangeSteps (node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js:37:12)
    at HTMLStyleElementImpl.insertBefore (node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:225:14)
    at HTMLStyleElementImpl.insertBefore (node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:202:14)
    at HTMLStyleElementImpl.appendChild (node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:327:17)
    at HTMLToDOM._parseWithParse5 (node_modules/jsdom/lib/jsdom/browser/htmltodom.js:60:21)
    at HTMLToDOM._doParse (node_modules/jsdom/lib/jsdom/browser/htmltodom.js:47:42)
    at HTMLToDOM.appendToNode (node_modules/jsdom/lib/jsdom/browser/htmltodom.js:37:17)
    at setInnerHTML (node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js:40:25)
    at HTMLStyleElementImpl.set innerHTML [as innerHTML] (node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js:211:5)
    at HTMLStyleElement.set [as innerHTML] (node_modules/jsdom/lib/jsdom/living/generated/Element.js:874:29)
    at node_modules/sweetalert2/dist/sweetalert2.all.js:1978:1
    at Object.<anonymous> (node_modules/sweetalert2/dist/sweetalert2.all.js:1978:1)
Run Code Online (Sandbox Code Playgroud)

它似乎也与 SweetAlert2 库有关。

testEnvironmentOptions 的 Jest 文档

JSDOM 问题

小智 0

此 GitHub 问题中描述了几种解决方案,其中最干净的可能是

const virtualConsole = new jsdom.VirtualConsole();
virtualConsole.sendTo(console, { omitJSDOMErrors: true });
virtualConsole.on("jsdomError", (err) => {
    if (err.message !== "Could not parse CSS stylesheet") {
        console.error(err);
    }
});
Run Code Online (Sandbox Code Playgroud)

另请参阅https://github.com/jsdom/jsdom#virtual-consoles了解 JSDom 错误输出如何工作的说明。