0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

hasセレクタを使うとjsdomがSyntaxError: missing ) after argument listになる問題の歴史

Posted at

前提

Frontendの開発でvitestやjestをjsdom環境で動かしている

発生した問題

vitestを動かしたときに、テスト対象のファイル以外であっても、読み込むファイルの中に

<div className="has-[focus-visible]:outline">

のようなhasセレクタ(tailwindで失礼)使っている場合、
SyntaxError: missing ) after argument list
というエラーが出力されてテストがエラーになる。

理由

jsdomが内部的に使っているCSSセレクタエンジン(ブラウザのquerySelectorを模倣したようなもの。CSSからDOM要素を取得するのに使う)のnwsapiがhasセレクタに対応していないから。

歴史

つまり

jsdomがdom-selectorを使っていたバージョン23.2.0ではhasセレクタが使えます。
しかしissueの通りパフォーマンスに影響があって、特にgetByRoleが遅くなってしまいました。(自分のProjectで言うと、テスト全体の実行時間が10秒から30秒になっていた。)

どうすればいいか

  1. happydomを使う -> jsdomの競合他社のようなやつです
  2. hasなしで実装しつつ、jsdomもCSSセレクタエンジンの変更やアップデートは定期的に行っているようなので、常に最新版を試して望みのCSSが使えるよういなっているか確認する
  3. browser modeを使う https://vitest.dev/guide/browser/ ただしbrowser modeではMockに制約があったりするので、結局jsdomなどのブラウザエミュレーションと併用すると思う
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?