今流行りのテストフレームワークであるVitestをTesting Libraryと併せて使ってみたので導入手順や注意点を記録として残しておきます。
※Vitestのバージョン0.12.4時点の情報です。
セットアップ
必要なライブラリのインストール
yarn add -D vitest jsdom @vitejs/plugin-react @testing-library/react @testing-library/jest-dom @testing-library/user-event @types/testing-library__user-event
カスタムマッチャーの設定
@testing-library/jest-dom
などのカスタムマッチャーをグローバルで使えるようにsrc
などのディレクトリの下にtest/setup.ts
ファイルを作成しjest-dom
をimportしておきます。
このファイルを後ほどVitestのconfigに追記します。
// src/test/setup.ts
import '@testing-library/jest-dom'
vitest.config.jsの設定
プロジェクトのルートにvitest.config.js
を作成し以下の設定を記述します。
次に設定する時には忘れていそうなのでtest
で設定しているオプションについても記載しておきます。他のオプションについてはこちらのページで確認できます。
globals
: VitestのAPIをグローバルで使うかどうかを指定。デフォルトはfalse
。
environment
: DOMの検証に使用するライブラリを指定。現在はjsdomかhappy-domのどちらかを設定できる。
setupFiles
: テスト実行前に読み込むファイルを指定。
/// <reference types="vitest" />
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vitest/config'
export default defineConfig({
plugins: [react()],
test: {
globals: true,
environment: 'jsdom',
setupFiles: './src/test/setup.ts'
}
})
npm scriptsの設定
packge.json
のscripts
に以下の2行を追記します。
"test": "vitest run",
"coverage": "vitest run --coverage" // テストのカバレッジを取るためのコマンド
ここまで設定したらテストを書きyarn test
を実行することでテストが走るはずです。
next-page-testerについて
Next.jsのページ遷移やgetStaticProps
などのテストをする際に使われるnext-page-testerをvitestに組み込もうとした時このようなエラーに遭遇しました。
Error: [next-page-tester] Failed to load "_document.tsx" file due to SyntaxError: Cannot use import statement outside a module
同じようなイシューがこちらにもありましたが、原因はVitestがESMファーストなライブラリであるため一部CommonJS形式で書かれているnext-page-testerはサポートされていないということのようでした。
next-page-testerの方でもVitestに移行しようとするような動きがありましたが、まだCloseできていないみたいです。
私はとりあえず様子を見つつnext-page-testerを使いたくなったら素直にJestを使おうと思います。
この辺りの解決策など知っている方がいましたら教えていただけると幸いです。
まとめ
シンプルな設定ですぐテストを始められる、Viteで実行されるため高速、ESMファーストで開発されているなどJestと比較してもより多くの恩恵を受けられる良いテストフレームワークだと感じました。
アップデートも頻繁に行われているので今後もキャッチアップしつつテストを導入する際は積極的に使っていきたいです。