Jest语法错误:未知的伪类选择器“:has()”

jm81lzqq  于 2023-01-28  发布在  Jest
关注(0)|答案(1)|浏览(280)

我有一个Angular(v15.0.0)组件,它收集了所有符合CSS标准的DOM元素,创建它是为了在第三方组件和我的自定义组件上实现相同的效果。

handleOpenMenusListener(event: MouseEvent) {
        const target = event.target as Element;

        if (target && target.classList.contains('p-panelmenu-header-link')) {
            const allActiveLink = this.el.nativeElement.querySelectorAll(
                '.p-panelmenu-panel:has(.p-toggleable-content.p-panelmenu-expanded) .p-panelmenu-header-link, .my-custom-nav:has(.p-panelmenu-expanded) .my-custom-trigger'
            );
        }
...

但是,当我试图用Jest测试这个函数时,我得到了下面的错误:

SyntaxError: unknown pseudo-class selector ':has(.p-toggleable-content.p-panelmenu-expanded)'
    at emit (C:\Projects\myproject\node_modules\nwsapi\src\nwsapi.js:570:17)
    at compileSelector (C:\Projects\myproject\node_modules\nwsapi\src\nwsapi.js:1297:17)
    at compile (C:\Projects\myproject\node_modules\nwsapi\src\nwsapi.js:758:16)
    at collect (C:\Projects\myproject\node_modules\nwsapi\src\nwsapi.js:1563:22)
    at Object._querySelectorAll [as select] (C:\Projects\myproject\node_modules\nwsapi\src\nwsapi.js:1523:36)
    at HTMLDivElementImpl.querySelectorAll (C:\Projects\myproject\node_modules\jsdom\lib\jsdom\living\nodes\ParentNode-impl.js:78:26)
    at HTMLDivElement.querySelectorAll (C:\Projects\myproject\node_modules\jsdom\lib\jsdom\living\generated\Element.js:1119:58)
    at MenuComponent.handleOpenMenusListener (C:\Projects\myproject\src\app\@shared\menu\menu.component.ts:58:57)

我尝试过重组这部分。我的第一个意图是添加我自己的类作为额外的步骤,但这将需要额外的事件处理程序和更多其他不必要的代码。另一种方法是提升这个选择器并在测试运行时覆盖它的内容,但这似乎有点笨拙。

dtcbnfnu

dtcbnfnu1#

这里的错误不是Jest,而是运行单元测试的运行时。在写这个答案的时候,伪选择器:has的支持是only partial
如果你运行的是Firefox,你需要启用layout.css.has-selector.enabled标记,如果是headless chrome,你需要升级到>= 105版本。

相关问题