テストフィルタリング
スイートとテストのフィルタリング、タイムアウト設定、並列実行について説明します。
CLI
CLI を使用して、テストファイルを名前でフィルタリングできます。
bash
$ vitest basic
これにより、basic
を含むテストファイルのみが実行されます。例えば、以下のファイルが該当します。
basic.test.ts
basic-foo.test.ts
basic/foo.test.ts
また、-t, --testNamePattern <pattern>
オプションを使用すると、テストを完全な名前でフィルタリングできます。このオプションは、ファイル名ではなく、ファイル内で定義されたテスト名でフィルタリングしたい場合に便利です。
Vitest 3 以降では、ファイル名と行番号を指定してテストを実行することも可能です。
bash
$ vitest basic/foo.test.ts:10
WARNING
この機能を利用するには、Vitest が完全なファイル名を必要とします。完全なファイル名とは、現在の作業ディレクトリからの相対パス、または絶対ファイルパスのいずれかです。
bash
$ vitest basic/foo.js:10 # ✅
$ vitest ./basic/foo.js:10 # ✅
$ vitest /users/project/basic/foo.js:10 # ✅
$ vitest foo:10 # ❌
$ vitest ./basic/foo:10 # ❌
現時点では、Vitest は範囲指定をサポートしていません。
bash
$ vitest basic/foo.test.ts:10, basic/foo.test.ts:25 # ✅
$ vitest basic/foo.test.ts:10-25 # ❌
タイムアウトの指定
オプションとして、テストの第3引数にミリ秒単位のタイムアウトを指定できます。デフォルトは 5秒 です。
ts
import { test } from 'vitest';
test('name', async () => {
/* ... */
}, 1000);
フックにもタイムアウトを設定でき、デフォルトは同様に5秒です。
ts
import { beforeAll } from 'vitest';
beforeAll(async () => {
/* ... */
}, 1000);
スイートとテストのスキップ
特定のスイートやテストの実行をスキップするには、.skip
を使用します。
ts
import { assert, describe, it } from 'vitest';
describe.skip('skipped suite', () => {
it('test', () => {
// スイートがスキップされたため、このアサーションは実行されません。
assert.equal(Math.sqrt(4), 3);
});
});
describe('suite', () => {
it.skip('skipped test', () => {
// テストがスキップされたため、このアサーションは実行されません。
assert.equal(Math.sqrt(4), 3);
});
});
実行するスイートとテストの選択
特定のスイートやテストのみを実行するには、.only
を使用します。
ts
import { assert, describe, it } from 'vitest';
// このスイート(および .only がマークされた他のスイート)のみが実行されます。
describe.only('suite', () => {
it('test', () => {
assert.equal(Math.sqrt(4), 3);
});
});
describe('another suite', () => {
it('skipped test', () => {
// .only モードでテストが実行されているため、このテストはスキップされます。
assert.equal(Math.sqrt(4), 3);
});
it.only('test', () => {
// このテスト(および .only がマークされた他のテスト)のみが実行されます。
assert.equal(Math.sqrt(4), 2);
});
});
未実装のスイートとテスト
実装予定のスイートやテストを仮登録するには、.todo
を使用します。
ts
import { describe, it } from 'vitest';
// このスイートのエントリがレポートに表示されます。
describe.todo('unimplemented suite');
// このテストのエントリがレポートに表示されます。
describe('suite', () => {
it.todo('unimplemented test');
});