インソース・テスト
Vitestは、Rustのモジュールテストと同様に、実装と同時にソースコード内でテストを実行する方法を提供します。
このアプローチにより、テストは実装と同じクロージャを共有し、エクスポートされていないプライベートな状態もテストできます。さらに、開発時のフィードバックループも短縮されます。
WARNING
このガイドでは、ソースコード内にテストを記述する方法を説明します。テストを別のファイルに記述する必要がある場合は、「テストの記述」ガイド ("Writing Tests" guide) を参照してください。
セットアップ
開始するには、ソースファイルの最後にif (import.meta.vitest)
ブロックを配置し、その中にテストを記述します。例:
// 実装
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// インソーステストスイート
if (import.meta.vitest) {
const { it, expect } = import.meta.vitest;
it('add', () => {
expect(add()).toBe(0);
expect(add(1)).toBe(1);
expect(add(1, 2, 3)).toBe(6);
});
}
Vitestがsrc/
配下のファイルをテスト対象として認識するよう、includeSource
設定を更新します。
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
これでテストを実行できます。
$ npx vitest
プロダクションビルド
本番ビルドでは、バンドラーによるデッドコード削除を有効にするため、設定ファイルにdefine
オプションを設定する必要があります。例えば、Viteの場合は以下のようになります。
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
その他のバンドラー
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
詳細情報:unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
詳細情報:Rollup
TypeScript
import.meta.vitest
のTypeScriptサポートを有効にするには、tsconfig.json
にvitest/importMeta
を追加します。
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
完全な例については、examples/in-source-test
を参照してください。
注意事項
この機能は、以下のような場合に特に役立ちます。
- スコープの小さい関数やユーティリティの単体テスト
- プロトタイピング
- インラインアサーション
コンポーネントやE2Eテストのようなより複雑なテストには、代わりに別のテストファイルを使用することをお勧めします。