Skip to content
Vitest 1
Main Navigation ガイドAPI設定高度な
1.6.1
0.34.6

日本語

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
한국어
Italiano
Polski
Türkçe
čeština
magyar

日本語

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
한국어
Italiano
Polski
Türkçe
čeština
magyar

外観

Sidebar Navigation

ガイド

Vitest の必要性

はじめに

特徴

ワークスペース

コマンドラインインターフェース

テストのフィルタリング

レポーター

カバレッジ

スナップショット

モック

型テスト

Vitest UI

ブラウザモード

ソース内テスト

テストコンテキスト

テスト環境

マッチャー拡張

IDE 連携機能

デバッグ

他のテストランナーとの比較

マイグレーションガイド

よくあるエラー

パフォーマンスの改善

API

テスト API リファレンス

モック関数

Vi

expect

expectTypeOf

assert

assertType

設定

Vitestの設定ファイル管理

Vitestの設定

このページの内容

特徴 ​

  • Vite の設定、トランスフォーマー、リゾルバー、およびプラグインをそのまま利用可能。
  • アプリケーションの設定を流用してテストを実行できます。
  • まるでテスト版の HMR のように、高速でスマートなウォッチモード!
  • Vue、React、Svelte、Lit などのコンポーネントテストに対応
  • TypeScript / JSX をすぐに利用可能
  • ESM ファースト、トップレベル await をサポート
  • Tinypool を介したワーカーによるマルチスレッド処理
  • Tinybench によるベンチマークのサポート
  • スイートとテストのフィルタリング、タイムアウト、並行実行が可能
  • ワークスペース をサポート
  • Jest 互換のスナップショット
  • アサーション用に Chai が組み込まれており、Jest expect 互換の API も利用可能
  • モック用に Tinyspy が内蔵
  • DOM モックには happy-dom または jsdom を利用可能
  • v8 または istanbul を介したコードカバレッジ
  • Rust のようにソースコード内にテストを記述する インソーステスト
  • expect-type を介した型テスト
ビデオで最初のテストを作成する方法を学ぶ

テスト、開発、ビルド間で共有される設定 ​

Vite の設定、トランスフォーマー、リゾルバー、およびプラグインを利用し、アプリケーションと同じ設定でテストを実行します。

詳細については、Vitest の設定を参照してください。

ウォッチモード ​

bash
$ vitest

ソースコードまたはテストファイルを変更すると、Vitest はモジュールグラフを解析し、関連するテストのみを再実行します。Vite の HMR と同様の動作です!

vitest は、開発環境ではデフォルトで watch mode(ウォッチモード)で起動し、CI 環境(process.env.CI が存在する場合)では run mode(実行モード)で起動します。vitest watch または vitest run を使用して、モードを明示的に指定できます。

一般的な Web イディオムをすぐに利用可能 ​

ES Module、TypeScript、JSX、PostCSS をすぐに利用できます。

スレッド ​

デフォルトでは、Vitest はnode:worker_threadsを介してTinypool(Piscinaの軽量フォーク)を使用し、複数のスレッドでテストファイルを実行することで、テストを同時に実行できるようにします。テストコードがマルチスレッドと互換性がない場合は、--pool=forksに切り替えることができます。これは、Tinypool を介してnode:child_processを使用して複数のプロセスでテストを実行します。

単一のスレッドまたはプロセスでテストを実行するには、poolOptionsを参照してください。

Vitest では、各ファイルの環境が分離されているため、あるファイルの環境変数が他のファイルに影響することはありません。分離は、CLI に --no-isolate を指定することで無効にできます(精度が低下する代わりに実行性能が向上します)。

テストフィルタリング ​

Vitest は、テストを絞り込むための多くの方法を提供しており、テストの実行を高速化し、開発に集中できます。

詳細については、テストフィルタリングを参照してください。

テストの並行実行 ​

連続するテストで .concurrent を使用して、それらを並行して実行します。

ts
import { describe, it } from 'vitest';

// concurrent でマークされた 2 つのテストは、並行して実行されます
describe('suite', () => {
  it('serial test', async () => {
    /* ... */
  });
  it.concurrent('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
});

スイートで .concurrent を使用すると、その中のすべてのテストが並行して実行されます。

ts
import { describe, it } from 'vitest';

// このスイート内のすべてのテストは、並行して実行されます
describe.concurrent('suite', () => {
  it('concurrent test 1', async ({ expect }) => {
    /* ... */
  });
  it('concurrent test 2', async ({ expect }) => {
    /* ... */
  });
  it.concurrent('concurrent test 3', async ({ expect }) => {
    /* ... */
  });
});

並行スイートやテストでも .skip、.only、および .todo を使用できます。詳細については、API リファレンスを参照してください。

WARNING

並行テストを実行する場合、スナップショットとアサーションは、正しいテストが検出されるように、ローカルの テストコンテキスト から expect を使用する必要があります。

スナップショット ​

Jest 互換 のスナップショットをサポートします。

ts
import { expect, it } from 'vitest';

it('renders correctly', () => {
  const result = render();
  expect(result).toMatchSnapshot();
});

詳細については、スナップショットを参照してください。

Chai および Jest expect との互換性 ​

Chai はアサーション用に組み込まれており、Jest expect 互換の API も利用できます。

マッチャーを追加するサードパーティライブラリを使用している場合は、test.globals を true に設定すると、互換性が向上します。

モック ​

Tinyspy は、vi オブジェクト上の jest 互換 API を使用したモック用に内蔵されています。

ts
import { expect, vi } from 'vitest';

const fn = vi.fn();

fn('hello', 1);

expect(vi.isMockFunction(fn)).toBe(true);
expect(fn.mock.calls[0]).toEqual(['hello', 1]);

fn.mockImplementation(arg => arg);

fn('world', 2);

expect(fn.mock.results[1].value).toBe('world');

Vitest は、DOM およびブラウザ API のモックのために happy-dom と jsdom の両方をサポートしています。これらは Vitest に同梱されていないため、別途インストールする必要があります。

bash
$ npm i -D happy-dom
# or
$ npm i -D jsdom

その後、設定ファイルで environment オプションを変更します。

ts
// vitest.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    environment: 'happy-dom', // or 'jsdom', 'node'
  },
});

詳細については、モックを参照してください。

カバレッジ ​

Vitest は、v8 を介したネイティブコードカバレッジと、istanbul を介したインストルメント化されたコードカバレッジをサポートしています。

json
{
  "scripts": {
    "test": "vitest",
    "coverage": "vitest run --coverage"
  }
}

詳細については、カバレッジを参照してください。

インソーステスト ​

Vitest は、Rust のモジュールテスト と同様に、実装と一緒にソースコード内でテストを記述する方法も提供しています。

これにより、テストは実装と同じクロージャ(スコープ)を共有し、エクスポートせずにプライベートな状態をテストできます。そのため、開発効率が向上します。

ts
// src/index.ts

// 実装
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 0.23.0 以降、Tinybench を介して bench 関数を使用してベンチマークテストを実行し、パフォーマンスの結果を比較できます。

ts
import { bench, describe } from 'vitest';

describe('sort', () => {
  bench('normal', () => {
    const x = [1, 5, 4, 2, 3];
    x.sort((a, b) => {
      return a - b;
    });
  });

  bench('reverse', () => {
    const x = [1, 5, 4, 2, 3];
    x.reverse().sort((a, b) => {
      return a - b;
    });
  });
});
Benchmark reportBenchmark report

型テスト 実験的 ​

Vitest 0.25.0 以降、型テストを記述 して型の回帰を検出できます。Vitest には、同様で理解しやすい API を提供するために、expect-type パッケージが付属しています。

ts
import { assertType, expectTypeOf } from 'vitest';
import { mount } from './mount.js';

test('my types work properly', () => {
  expectTypeOf(mount).toBeFunction();
  expectTypeOf(mount).parameter(0).toMatchTypeOf<{ name: string }>();

  // @ts-expect-error name is a string
  assertType(mount({ name: 42 }));
});
Pager
前のページはじめに
次のページワークスペース

MITライセンス の下で公開されています。

Copyright (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/features

MITライセンス の下で公開されています。

Copyright (c) 2024 Mithril Contributors