Vitest 2.0 変更まとめ
Vitestのv2.0.0がいつの間にか出ていたので変更内容をまとめていく
Breaking Change
pool
のデフォルト値がforks
に変更
1.x系ではデフォルト値がthreads
だった。
threads
とpool
の違いは内部的に使用しているtinypoolのメソッドをworker_threads
の代わりにchild_process
を使用している点。
poolを指定しないでpoolOptionsを設定している場合は影響がある。
export default defineConfig({
test: {
poolOptions: {
- threads: {
- singleThread: true,
- },
+ forks: {
+ singleFork: true,
+ },
}
}
})
フックがスタックで実行される
v2.0以前はフックが並列で実行されていたが、直列で実行されるように変更。
こちらもsequence.hooks
のデフォルト値がparallel
からstack
に変更された。
stack
に変更されることでafterAll
/afterEach
の実行順に影響があるらしい。
例)
import { afterAll, test, expect } from "vitest";
afterAll(() => {
console.log("afterAll 1");
});
afterAll(() => {
console.log("afterAll 2");
});
test("1", () => {
expect(1 + 1).toBe(2);
});
-
sequence.hooks = "parallel"
の場合
-
sequence.hooks = "stack"
の場合
suite.concurrent
ですべてのテストが同時実行されるようになる
以前は特定のスイートごとに同時実行され、スイートは順番に実行されていたが、Jestの仕様に倣って全テストが同時実行されるようになる。(同時実行数自体はmaxConcurrency
で指定可能)
coverage.ignoreEmptyLines
がデフォルトで有効に
esbuildだとトランスパイルされるときにTypescriptの型とかコメントが削除されるけど、それを無視するようにする設定。
watchExclude
オプションが削除
server.watch.ignored
に置き換わり。
--segfault-retry
の削除
pool
のデフォルト値が変更になったため、必要なくなった。
task.meta
が出力されるように変更
JSONレポーターで{
...,
"testResults": [
{
"assertionResults": [
{
"ancestorTitles": [],
"fullName": "1",
"status": "passed",
"title": "1",
"duration": 1,
"failureMessages": [],
+ "meta": { "custom": "sampe-meta" }
}
],
"startTime": 1721891818124,
"endTime": 1721891818125,
"status": "passed",
"message": "",
"name": "..."
}
]
}
モック関数の型定義の簡略化
vi.fn
やMock
などのモック関数の型定義としてパラメータと返却値をそれぞれジェネリクスで渡す必要があったが、関数の型だけを渡せばよくなった。
import { type Mock, vi } from 'vitest'
const add = (x: number, y: number): number => x + y
// using vi.fn<T>
const mockAdd = vi.fn<typeof add>()
// using Mock<T>
const mockAdd: Mock<typeof add> = vi.fn()
mocks.result
へのアクセス方法の変更
Resolveされた以前はモック関数がPromiseを返却したとき、mock.results
はResolveされた型を返却していた。
新たにPromiseの結果を持つmock.settledResults
が追加され、Resolveされた型を返却する。
(mock.results
はPromise型を返却する)
const fn = vi.fn().mockResolvedValueOnce('result')
await fn()
- const result = fn.mock.results[0] // 'result'
+ const result = fn.mock.results[0] // 'Promise<result>'
const settledResult = fn.mock.settledResults[0] // 'result'
これに関連して新規にtoHaveResolved
が追加される
const fn = vi.fn().mockResolvedValueOnce('result')
await fn()
- expect(fn).toHaveReturned('result')
+ expect(fn).toHaveResolved('result')
ブラウザモード
-
none
プロバイダーがpreview
にリネーム -
preview
プロバイダーがデフォルト値 -
indexScripts
がorchestratorScripts
にリネーム
Deprecated
-
vitest typecheck
コマンド-
vitest --typecheck
に変更
-
-
VITEST_JUNIT_CLASSNAME
とVITEST_JUNIT_SUITE_NAME
の環境変数- レポーターのオプションで設定する
-
c8
のカバレッジチェック-
coverage-v8
を代わりに使用する
-
-
SnapshotEnvironment
のvitest
からのexport-
vitest/snapshot
からインポートできる
-
-
SpyInstance
-
MockInstance
を使用
-