公式の[Getting Started](https://vitest.dev/guide/)を 参考に。依存関係は以下の通りで[[Vite]]の利用は必須。 > Vitest requires Vite >=v2.7.10 and Node >=v14 [[Vite]]の設定ファイル、[[vite.config.ts]]をそのまま使えるのが魅力。もちろん[[TypeScript]]の設定も不要。 ## プロジェクト作成 [[📜ViteでSvelte x TypeScriptプロジェクトを作成]]し、動作確認。 ## [[IntelliJ IDEA]]で読み込み [[Svelte(IntelliJ)]]をインストール。読み込むだけ。 ## [[Vitest]]インストール ```console $ npm i -D vitest $ npx vitest --version vitest/0.3.6 win32-x64 node-v16.13.0 ``` ## プロダクトコードを書く [[Svelte]]とは関係ないがユーティリティ関数をつくる。 ```ts:utils.ts export function addOne(x: number): number { return x + 1; } export function double(x: number): number { return x * 2; } ``` ## テストコードを書く ```ts:utils.test.ts import { describe, expect, test } from "vitest"; import { addOne } from "./utils"; test("addOne", () => { expect(addOne(1)).toBe(2); expect(addOne(2)).toBe(3); }); describe("sub", () => { test("double", () => { expect(addOne(1)).toBe(2); expect(addOne(2)).toBe(3); }); }); ``` ## テスト実行 ```console $ npx vitest WATCH C:/Users/tadashi-aikawa/tmp/svelte-ts-sandbox √ src/utils.test.ts (2) Test Files 1 passed (1) Tests 2 passed (2) Time 1.31s (in thread 2ms, 71216.76%) PASS Waiting for file changes... press h to show help, press q to quit ``` デフォルトがwatchモードのよう。初回の実行速度は[[Jest]]と大差ないが、リロードが一瞬だった。 ## [[Parameterized Test]] `describe.each`を使う。[[型引数 (TypeScript)|型引数]]を指定しないと[[ユニオン型 (TypeScript)|ユニオン型]]とみなされて推論できない場合があるので注意。 ```ts describe("utils/double", () => { describe.each<[number, number]>([ [1, 2], [2, 4], [3, 6], ])("double", (x, expected) => { test(`double(${x}) = ${expected}`, () => { expect(double(x)).toBe(expected); }); }); }); ``` [[Parameterized Test (Jest)|Parameterized Test]]を実行するときのように[[タグ付きテンプレート (JavaScript)|タグ付きテンプレート]]を使った形式には対応してなさそう。 > [!add] #2023/01/01 追記 > v0.25.3にて対応されたらしい。 > https://vitest.dev/api/#describe-each ## 所感 2022-02-17現在だとかなり用途が限定されるが、デメリットがなくなれば[[Jest]]からの移行は必至。 ### メリット - 速い - `watch`モードの差分実行は一瞬 - テスト用の環境準備が楽 - [[Vitest]]をインストールするだけ - [[Babel]]の設定ファイルやpresetファイル、pluginファイルが不要 - [[TypeScript]]のケアが不要 ### デメリット - まだ安定リリースされていない - [[Vite]]のプロジェクトでしか使えない - ~~[[JetBrains IDEでVitestのテストを実行]]できない~~ - [[IntelliJ IDEA]] 2022.3 で対応された #2023/01/02 - ~~[[Parameterized Test]]で[[タグ付きテンプレート (JavaScript)|タグ付きテンプレート]]を使った書き方ができない~~ - v0.25.3で対応された #2023/01/02