やりたいこと
通常vitestのテストはコマンドラインから実行するが、通常のTypeScriptコードから Vitestのテストコードをロードして実行したい。で、テスト結果を取得したい。
コード
vitestの内部APIを使うとできる。
import{ readFile }from'node:fs/promises'; import{ startVitest }from'vitest/node'; exportasyncfunctionrunVitest(testPath:string): Promise<string> {const jsonPath = 'test-results.json'; const vitest = await startVitest('test', [testPath], {watch: false, run: true, // 単一実行モードを有効化reporters: ['json'], // JSONレポーターを使用outputFile: jsonPath }); if (!vitest) {thrownewError('vitestの初期化に失敗しました'); }await vitest.close(); const json = await readFile(jsonPath, 'utf-8'); // console.log(json);return json; } runVitest('src/script/hoge.test.ts');
解説
startVitest()
を使うことで、Vitestのテストランナーをプログラムから起動できる。vitest.close()
でテストランナーを終了。非同期で実行されるテストが完了するまで待つのを保証する。readFile
でJSONファイルを読み込み、文字列として返す。test-results.json
はoutputFile
で指定したファイル名。runVitest
関数を呼び出すことで、指定したテストファイルを実行し、JSON形式の結果を取得できる。