やりたいこと
通常vitestのテストはコマンドラインから実行するが、通常のTypeScriptコードから Vitestのテストコードをロードして実行したい。で、テスト結果を取得したい。
コード
vitestの内部APIを使うとできる。
import { readFile } from 'node:fs/promises'; import { startVitest } from 'vitest/node'; export async function runVitest(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) { throw new Error('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形式の結果を取得できる。