Skip to content
Vitest 3
Main Navigation ガイド & API設定ブラウザモード高度なAPI
3.2.0
2.1.9
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 の設定

API

テストAPIリファレンス

モック関数

Vi

expect

expectTypeOf

assert

assertType

ガイド

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

テストフィルタリング

テストプロジェクト

レポーター

カバレッジ

スナップショット

モック

並列処理

型テスト

Vitest UI

インソース・テスト

テストコンテキスト

テストアノテーション

テスト環境

マッチャーの拡張

IDE統合

デバッグ

よくあるエラー

移行ガイド

Vitest 3.0 への移行

Jest からの移行

パフォーマンス

テストパフォーマンスのプロファイリング

パフォーマンスの向上

ブラウザーモード

上級者向けAPI

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

このページの内容

テストパフォーマンスのプロファイリング ​

Vitestを実行すると、テストの時間に関するメトリクスが報告されます。

bash
RUN  v2.1.1 /x/vitest/examples/profiling

✓ test/prime-number.test.ts (1) 4517ms
  ✓ generate prime number 4517ms

Test Files  1 passed (1)
     Tests  1 passed (1)
  Start at  09:32:53
  Duration  4.80s (transform 44ms, setup 0ms, collect 35ms, tests 4.52s, environment 0ms, prepare 81ms)
  # Time metrics ^^
  • Transform: ファイル変換にかかった時間。ファイル変換を参照してください。
  • Setup: setupFilesの実行に費やされた時間。
  • Collect: テストファイル内のすべてのテストを収集する時間。これには、すべてのファイル依存関係をインポートするために要した時間が含まれます。
  • Tests: テストケースを実行する時間。
  • Environment: テストenvironment(例:JSDOM)のセットアップにかかった時間。
  • Prepare: Vitestがテストランナーを準備する時間。

テストランナー ​

テスト実行時間が長い場合は、テストランナーのプロファイルを生成できます。以下のオプションについては、Node.jsのドキュメントを参照してください。

  • --cpu-prof
  • --heap-prof
  • --prof

WARNING

--profオプションは、node:worker_threadsの制限により、pool: 'threads'では動作しません。

これらのオプションをVitestのテストランナーに渡すには、Vitestの設定でpoolOptions.<pool>.execArgvを定義します。

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

export default defineConfig({
  test: {
    pool: 'forks',
    poolOptions: {
      forks: {
        execArgv: [
          '--cpu-prof',
          '--cpu-prof-dir=test-runner-profile',
          '--heap-prof',
          '--heap-prof-dir=test-runner-profile',
        ],

        // 単一のプロファイルを生成するには
        singleFork: true,
      },
    },
  },
});
ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    pool: 'threads',
    poolOptions: {
      threads: {
        execArgv: [
          '--cpu-prof',
          '--cpu-prof-dir=test-runner-profile',
          '--heap-prof',
          '--heap-prof-dir=test-runner-profile',
        ],

        // 単一のプロファイルを生成するには
        singleThread: true,
      },
    },
  },
});

テスト実行後、test-runner-profile/*.cpuprofileとtest-runner-profile/*.heapprofileファイルが生成されます。これらのファイルを分析する方法については、プロファイリングレコードの検査を参照してください。

例については、Profiling | Examplesを参照してください。

メインスレッド ​

メインスレッドのプロファイリングは、VitestのVite使用状況およびglobalSetupファイルのデバッグに役立ちます。 ここではViteプラグインも実行されます。

TIP

Vite固有のプロファイリングに関するその他のヒントについては、Performance | Viteを参照してください。

Viteプラグインのパフォーマンスをプロファイリングするには、vite-plugin-inspectをお勧めします。

これを行うには、Vitestを実行するNode.jsプロセスに引数を渡す必要があります。

bash
$ node --cpu-prof --cpu-prof-dir=main-profile ./node_modules/vitest/vitest.mjs --run
#      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                  ^^^^^
#               Node.jsの引数                                           Vitestの引数

テスト実行後、main-profile/*.cpuprofileファイルが生成されます。これらのファイルを分析する方法については、プロファイリングレコードの検査を参照してください。

ファイル変換 ​

テストの変換と収集に時間がかかる場合、DEBUG=vite-node:*環境変数を使用して、どのファイルがvite-nodeによって変換および実行されているかを確認できます。

bash
$ DEBUG=vite-node:* vitest --run

 RUN  v2.1.1 /x/vitest/examples/profiling

  vite-node:server:request /x/vitest/examples/profiling/global-setup.ts +0ms
  vite-node:client:execute /x/vitest/examples/profiling/global-setup.ts +0ms
  vite-node:server:request /x/vitest/examples/profiling/test/prime-number.test.ts +45ms
  vite-node:client:execute /x/vitest/examples/profiling/test/prime-number.test.ts +26ms
  vite-node:server:request /src/prime-number.ts +9ms
  vite-node:client:execute /x/vitest/examples/profiling/src/prime-number.ts +9ms
  vite-node:server:request /src/unnecessary-file.ts +6ms
  vite-node:client:execute /x/vitest/examples/profiling/src/unnecessary-file.ts +4ms
...

このプロファイリング戦略は、バレルファイルによって引き起こされる不要な変換を特定するのに役立ちます。 これらのログに、テスト実行時に読み込まれるべきではないファイルが含まれている場合、バレルファイルが不要なファイルをインポートしている可能性があります。

Vitest UIを使用して、バレルファイルによって引き起こされる遅延のデバッグも可能です。 以下の例は、バレルファイルなしでファイルをインポートすると、変換対象ファイルの量が約85%削減されることを示しています。

├── src
│   └── utils
│       ├── currency.ts
│       ├── formatters.ts  <-- テスト対象ファイル
│       ├── index.ts
│       ├── location.ts
│       ├── math.ts
│       ├── time.ts
│       └── users.ts
├── test
│   └── formatters.test.ts
└── vitest.config.ts
ts
import { expect, test } from 'vitest';
import { formatter } from '../src/utils'; 
import { formatter } from '../src/utils/formatters'; 

test('formatter works', () => {
  expect(formatter).not.toThrow();
});
Vitest UI demonstrating barrel file issues

ファイルの変換方法を確認するには、VITE_NODE_DEBUG_DUMP環境変数を使用して、変換済みファイルをファイルシステムに書き出せます。

bash
$ VITE_NODE_DEBUG_DUMP=true vitest --run

[vite-node] [debug] dump modules to /x/examples/profiling/.vite-node/dump

 RUN  v2.1.1 /x/vitest/examples/profiling
...

$ ls .vite-node/dump/
_x_examples_profiling_global-setup_ts-1292904907.js
_x_examples_profiling_test_prime-number_test_ts-1413378098.js
_src_prime-number_ts-525172412.js

コードカバレッジ ​

コードカバレッジの生成が遅いプロジェクトでは、DEBUG=vitest:coverage環境変数を使用してパフォーマンスログを有効化できます。

bash
$ DEBUG=vitest:coverage vitest --run --coverage

 RUN  v3.1.1 /x/vitest-example

  vitest:coverage Reading coverage results 2/2
  vitest:coverage Converting 1/2
  vitest:coverage 4 ms /x/src/multiply.ts
  vitest:coverage Converting 2/2
  vitest:coverage 552 ms /x/src/add.ts
  vitest:coverage Uncovered files 1/2
  vitest:coverage File "/x/src/large-file.ts" is taking longer than 3s
  vitest:coverage 3027 ms /x/src/large-file.ts
  vitest:coverage Uncovered files 2/2
  vitest:coverage 4 ms /x/src/untested-file.ts
  vitest:coverage Generate coverage total time 3521 ms

このプロファイリングアプローチは、カバレッジプロバイダーが誤って選択した大容量ファイルを検出するのに最適です。 たとえば、設定が誤って大きなビルド済みミニファイされたJavaScriptファイルをコードカバレッジに含めている場合、それらはログに表示されます。 このような場合は、coverage.includeおよびcoverage.excludeオプションを調整することをお勧めします。

プロファイリングレコードの検査 ​

*.cpuprofileおよび*.heapprofileの内容は、さまざまなツールで検査できます。例については、以下のリストをご覧ください。

  • Speedscope
  • Performance Profiling JavaScript in Visual Studio Code
  • Profile Node.js performance with the Performance panel | developer.chrome.com
  • Memory panel overview | developer.chrome.com
Pager
前のページ移行ガイド
次のページパフォーマンスの向上

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

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/profiling-test-performance

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

Copyright (c) 2021-Present Vitest Team