テストコードの型エラーを放置しない
2025-02-26

チームでVitestを使っているのですが、ある日テストコードを書こうと思ってテストファイルを開くと型エラーがたくさん出ていました。

以前Jestを使っている際にはテストコード内に型エラーがあったらテストがfailしていたのですが、どうやらVitestはそうではないようです。

型エラーを放置したくないので、対策を講じた話を書きます。

原因

VitestはViteを基盤に作られており、Viteの公式ドキュメントを見ると型チェックについての記載がありました。

Note that Vite only performs transpilation on .ts files and does NOT perform type checking

さらに色々と調べると、TypeScriptの型チェックはコンパイル時に行わるもののVitestはコンパイル後のJavaScriptコードを実行するため、型エラーはテストの実行時には検出されないことが分かりました。

対策

結論としては、テスト実行時にtsc --noEmitを実行するようにしました。

tsc --noEmitはTypeScript のコンパイラ (tsc) を実行するときに、型チェックのみを行い、ファイルの出力(コンパイル結果)を生成しない オプションです。

これを組み合わせてpackage.jsonに以下のように定義することで、テスト実行時に型エラーを検出できるようになりました。

"test": "tsc --noEmit && vitest --run"

おわりに

今回の対策以外にも、型定義自体をチェックするアプローチもあるようだったので、どこかで試してみようと思いました。

https://vitest.dev/guide/testing-types.html

© 2023 yutasb