遂にバージョン1を迎えたVitestのバージョンを上げる

## はじめに
Vitestが2023年12月4日に[バージョン1.0.0](https://github.com/vitest-dev/vitest/releases/tag/v1.0.0)を迎えました。
VitestはJavaScript・TypeScriptのテストフレームです。Viteと同じ設定で動き、`watch`モードのHMRの様な効率的なテスト実行、Jestの記法と似たような書き心地でテストを記述できる点が特徴的です。
この記事ではVitestが1.0.0にバージョンアップして変更された記法などを紹介します。
Vitest自体について知りたい場合は[公式ドキュメント](https://vitest.dev/)や[去年記述した記事](https://qiita.com/KokiSakano/items/f23e979004f72d70165e)があるのでよければ見てください。

## Vitest1.0.0
### 必要な環境設定
バージョン1からはNodeのバージョンが18以降、Viteのバージョンが5以降が必要になってきます。Viteのバージョン5に上がったのも1ヶ月以内のことなので上げていなければこの機会にあげましょう。
そして、`@vitest/ui`や`@vitest/coverage-v8`のようなサブパッケージのバージョンも同じバージョンで揃えて利用する必要があります。

### スナップショットの変更
スナップショットの結果が変更されました。
```ts
expect('hello vitest').toMatchInlineSnapshot()
```
上記のテストによって以下のようなスナップショットが生成されるようになりました。
```ts
// 1.0.0
expect('hello vitest').toMatchInlineSnapshot('"hello vitest"')

// 0.34.6
expect('hello vitest').toMatchInlineSnapshot(`"hello vitest"`)
```

私の手元では確認できませんでしたが、以下の結果も変更されたとされています。
```ts
// 1.0.0
expect({ foo: 'bar' }).toMatchInlineSnapshot(`
  Object {
    "foo": "bar",
  }
`)
// 0.34.6
expect({ foo: 'bar' }).toMatchInlineSnapshot(`
  Object {
    \\"foo\\": \\"bar\\",
  }
`);
```
記法的に[`pretty-format`](https://github.com/jestjs/jest/tree/main/packages/pretty-format)を有効にすることで再現すると思いましたが、両バージョンとも以下のような出力で違いが見られませんでした。
```ts
/**
 * snapshotFormat: {
 *   printBasicPrototype: true,
 * } ,
 */
expect({ foo: 'bar' }).toMatchInlineSnapshot(`
  Object {
    "foo": "bar",
  }
`);

/**
 * default
 */
expect({ foo: 'bar' }).toMatchInlineSnapshot(`
  {
    "foo": "bar",
  }
`);

```

この他にVitestのsnapshotに関連するパッケージ`@vitest/snapshot`にていくつか変更があったようです(通常は直接触らないので影響はないはずです)。

### 設定の変更
#### `--threads`が`--pool=threads`になりました
[`tinypool`](https://github.com/tinylibs/tinypool)でマルチスレッドを有効にするものです。


#### `--no-threads`が`--pool=forks`になりました
`child_process`でマルチスレッドを有効にするものです。


#### `--single-thread`が`--poolOptions.threads.singleThread`になりました
単一のスレッドで実行するものです。


#### `--experimental-vm-threads`が`--pool=vmThreads`になりました
[`VM context`](https://nodejs.org/api/vm.html#vm-executing-javascript)でマルチスレッドを有効にするものです。


#### `--experimental-vm-worker-memory-limit`が`--poolOptions.vmThreads.memoryLimit`になりました
`--pool=vmThreads`とした時のオプションです。メモリの制限を設定します。


#### `--isolate`が`--poolOptions.<pool-name>.isolate and browser.isolate`になりました
テストファイルごとに環境を分割するものです。


#### `test.maxThreads`が`test.poolOptions.<pool-name>.maxThreads`になりました
最大のスレッド数を設定します。`<poo-name>`には`--pool`で指定したものを渡します。


#### `test.minThreads`が`test.poolOptions.<pool-name>.minThreads`になりました
最小のスレッド数を設定します。`<poo-name>`には`--pool`で指定したものを渡します。


#### `test.useAtomics`が`test.poolOptions.<pool-name>.useAtomics`になりました
データの整合性を保つためにAtomicsを使用してスレッドを開始します。`<poo-name>`には`--pool`で指定したものを渡します。


#### `test.poolMatchGlobs.child_process`が`test.poolMatchGlobs.forks`になりました
指定したglobに基づいて行われるテストで`child_process`のマルチスレッドを有効にします。

#### `test.poolMatchGlobs.experimentalVmThreads`が`test.poolMatchGlobs.vmThreads`になりました
指定したglobに基づいて行われるテストで`VM context`のマルチスレッドを有効にします。

### coverageの変更
テストしていないファイルを含めてcoverageレポートに含めるのがデフォルトになりました。元のデフォルトの挙動にするには`coverage.all`をfalsで設定してください。
また、閾値に関する設定はまとめて記述するようになりました。
```ts
// 1.0.0
coverage: {
  threshold: {
    perFile: true,
    thresholdAutoUpdate: true,
    100: true,
    lines: 100,
    functions: 100,
    branches: 100,
    statements: 100,
  }
}

// 0.34.6
coverage: {
  perFile: true,
  thresholdAutoUpdate: true,
  100: true,
  lines: 100,
  functions: 100,
  branches: 100,
  statements: 100,
}
```

### 型の変更
Jestとの互換性のため`EnhancedSpy`型が削除され、`SpyInstance`が非推奨になりました。今後は`MockInstance`を使用するようにしてください。
`SpyInstance`はバージョン2.0.0になるタイミングで削除されるので今のうちにあらためておきましょう。

### vi.useFakeTimerの挙動
`vi.useFakeTimers`が`process.nextTick`のモックを自動でしなくなりました。
今後は`vi.useFakeTimers({toFake: ['nextTick'] })`を用いることでモックを行うように設定できますが、`--pool=forks`を利用している場合は行えないことに注意してください。