👏

Jest → Vitest に移行してみた感想・速度の比較など

2023/05/29に公開

テストファイルが 15 個あるリポジトリ を Jest → Vitest に移行してみた。

良かった点

  • 実行時間が 7.5 秒→ 2.9 秒、半分以下になった
  • Jest の API と互換性があるので s/jest/vi/g でほぼ動くのは凄い

イマイチな点

  • たまに変なバグ踏むことがあり [1] 、まだ完全に枯れきってない印象
  • 情報が公式ドキュメント以外にネットにまだ少なく、公式ドキュメントに書いてないことをやりたくなった場合にググっても情報がほぼ無くて詰む
    • これはまぁ時間が解決することではあるが

移行にあたって妥協した点

eslint-plugin-jest からeslint-plugin-vitest への移行は諦め、eslint-plugin-jest を使い続けることにした。

理由:

  • eslint-plugin-vitest の仕様が eslint-plugin-jest とかなり異なる
    • eslint-plugin-vitest/recommended が eslint-plugin-jest/recommended よりもだいぶ厳格さが落ちる
    • 同名のルールでも仕様が異なるものが存在する
    • そもそも eslint-plugin-vitest では実装されていないルールが存在する
    • (これらの状態で eslint-plugin-vitest を名乗るなよ ... という気持ちもぶっちゃけある)

総評

  • Vitest はまだ完全に枯れてないものの、テストが 2 倍以上高速化したので、移行して総じて良かった
  • 今後新しく何か作る場合は Vitest を使うと思う
    • 万が一、途中から Jest にしかないエコシステムを使いたくなって Jest に戻りたくなった場合も s/vi/jest/g に戻せばいいだけである
脚注
  1. fake timer を使ってる場合に useEffect が発火しない、というバグを踏んだ ↩︎

Discussion