Vitestでテストカテゴリーに応じてテストを実行する方法
リテールアプリ共創部のるおんです。皆さんはJavaScriptおよびTypeScriptのプロジェクトにおけるテストフレームワークに何を使用しているでしょうか。私は最近 Vitest を使用しています。ChaiやJestの書き方のままで高速にテストを実行できるのはとても嬉しいですよね。
今回はVitestにおいて、テストのカテゴリや単位に応じてテストできるようにする方法をご紹介します。単体テストや統合テストなど、様々な種類のテストがプロジェクトに存在していると思いますが、それらをテストする際に、単にvitest run
とするだけでは全てのテストが実行されてしまいます。単体テストだけ実行したいというような場面があると思いますが、Vitestの設定を変更してこの要求に簡単に対応することができます。
Vitestとは
VitestはJavaScriptの高速なテストフレームワークです
Vitest の詳細はこちらからご参照ください。
設定
今回の例では、我々がプロジェクトで用いているGoogleのTest Sizesに準拠したSmall/Mediumに分類されたテストをそれぞれ実行してみたいと思います。
例えば、以下のような構造になっているとします。
/
└─ test
├─ example1.small.test
├─ example1.medium.test
├─ example2.small.test
└─ example2.medium.test
今回の要求としては、smallのみ、またはmediumテストのみを一度に実行できるようにすることです。
1.vitest.config.tsの設定
vitest.config.ts
ファイルに、ハイライトの行を追加します。
import path from 'path';
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
+ include: ['**/*.{test,spec,small.test,medium.test}.?(c|m)[jt]s?(x)'],
alias: {
'@': path.resolve(__dirname, './src'),
},
exclude: ['./tsc-cache'],
globals: false,
},
});
Vitestのincludeオプションは、テスト対象のファイルを指定するためのものです。公式ドキュメントによると、デフォルトでは['**/*.{test,spec}.?(c|m)[jt]s?(x)']
となっています。そのため、test
とspec
を名前にもつファイルしかテスト対象に含まれません。
今回の設定では、これにsmall.test
とmedium.test
を追加することで、これらの拡張子を持つファイルもテスト対象として認識されるようにしています。
このようにすることで、vitest run 'small.test'
やvitest run 'medium.test'
とすることでテスト単位ごとに一斉にテストを実行できます。
ちなみに、**/*.
と先頭に書いてあるのは、はglobパターンの再帰ワイルドカードと呼ばれるものです。これは、ディレクトリの深さに関係なく、指定したパターンに一致するすべてのファイルを対象とするための記法です。
2.package.jsonのスクリプト追加
テストを実行しやすくするために、package.jsonに以下のスクリプトを追加しておきます。
{
"scripts": {
"test:small": "vitest run 'small.test'",
"test:medium": "vitest run 'medium.test'"
}
}
3.テストの実行
設定が完了したら、以下のコマンドで特定のテスト単位のみを実行できます
以下はsmallテストのみを実行します。
npm run test:small
> server@0.0.0 test:small
> vitest run 'small.test'
RUN v0.34.6 /Users/username/project/test
✓ test/example1.small.test(1)
✓ test/example2.small.test(1)
Test Files 2 passed (2)
Tests 2 passed (2)
無事二つのsmallテストだけを実行することができました!
おわりに
今回は、Vitestを使用して特定のファイルのみをテストする方法をご紹介しました。この方法を使えば、大規模なプロジェクトでも効率的にテストを実行できます。また、テストの種類(ユニットテスト、統合テストなど)に応じてファイル名を分けることで、より柔軟なテスト戦略を立てることができます。
参考
Vitest
Google Test Sizes
Oracle Cloud Infrastructureドキュメント - globパターン