テストファイルが 15 個あるリポジトリ を Jest → Vitest に移行してみた。
良かった点
- 実行時間が 7.5 秒→ 2.9 秒、半分以下になったのは凄い
- Jest の API と互換性があるので
s/jest/vi/g
でほぼ動くのは凄い
イマイチな点
- たまに変なバグ踏むことがあり *1、まだ完全に枯れきってない印象
- Jest にはあるが Vitest には無い機能がたまにある
jest.replaceProperty()
jest.mock()
,jest.doMock()
の第 3 引数のオプション- etc...
- 情報が公式ドキュメント以外にネットにまだ少なく、公式ドキュメントに書いてないことをやりたくなった場合にググっても情報がほぼ無くて詰む
- これはまぁ時間が解決することではあるが
移行にあたって妥協した点
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
に戻せばいいだけである
- 万が一、途中から Jest にしかないエコシステムを使いたくなって Jest に戻りたくなった場合も
*1:fake timer を使ってる場合に useEffect が発火しない、というバグを踏んだ