インソーステスト
Vitest は、Rust のモジュールテスト と同様に、ソースコード内で実装をテストする手法も提供しています。
これにより、テストは実装と同じクロージャを共有し、エクスポートしなくてもプライベート状態に対してテストを行うことができます。また、開発のためのより密接なフィードバックループももたらします。
セットアップ
開始するには、ソースファイルの最後に if (import.meta.vitest)
ブロックを置き、その中にテストを記述します。例:
ts
// src/index.ts
// the implementation
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0)
}
// in-source test suites
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 の includeSource
構成を更新して src/
以下のファイルをすべて含めます。
ts
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
})
これでテストを開始できます!
bash
$ npx vitest
本番ビルド
本番ビルドでは、構成ファイルに define
オプションを設定して、バンダーがデッドコードを削除できるようにする必要があります。Vite の場合、例を次に示します。
ts
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
その他のバンダー
unbuild
ts
// build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
さらに詳しく: unbuild
Rollup
ts
// rollup.config.js
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
を追加します。
json
// tsconfig.json
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
完全な例については、test/import-meta
を参照してください。
注意事項
この機能は以下に役立ちます。
- 小規模な機能やユーティリティに対する単体テスト
- プロトタイピング
- インラインアサーション
コンポーネントや E2E テストなどのより複雑なテストには、代わりに別個のテストファイルを使用することをお勧めします。