公式の[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