Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【Vitest5.0大解剖】Vitest5.0で静かに変わる挙動

 【Vitest5.0大解剖】Vitest5.0で静かに変わる挙動

Avatar for 赤神青空

赤神青空 PRO

September 06, 2026

Video

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪各テストの前に clearMocks が既定で true に vi.clearAllMocks() が走る これまで(4系) モックの呼び出し履歴がテストをまたいで残る 実行順に依存するテストが生まれやすい

    順序依存のテストを生む代表的な原因だった これから(5.0) 履歴は毎テスト前にクリアされる 実装は保持されるので、差し替えは残る {'従来の挙動に戻すなら clearMocks': 'false '} 既定値の変更なので、設定を書き換えていなくても挙動が変わります。 今ココ 挙動の変更 2/6
  2. ▪4系では警告のうえ、テストは通っていた await し忘れたアサーションが失敗になる resolves / rejects / toMatchFileSnapshot が対象。 ts

    test('unawaited assertion', async () => { expect(promise).resolves.toBe(1) // 5.0 では失敗する await expect(promise).resolves.toBe(1) // これが正しい }) 今ココ 挙動の変更 3/6
  3. ▪確定しないまま待ち続けることがなくなった expect.poll がタイムアウトで reject する コールバックが AbortSignal を受け取るので、実行中の処理を打ち切れる。 ts await

    expect.poll(async ({ signal }) => { const response = await fetch('/api/status', { signal }) return response.status }, { timeout: 1000 }).toBe(200) 今ココ 挙動の変更 4/6
  4. ▪Date と並んで、既定で対象に入った フェイクタイマーが Temporal もモックする vi.useFakeTimers() にも、フェイクタイマー無しの vi.setSystemTime() にも効く。 ts

    vi.setSystemTime(0) Temporal.Now.instant().epochMilliseconds // 0 // 対象から外すなら toNotFake に Temporal を足す 今ココ 挙動の変更 5/6
  5. ▪ 第4回のまとめ ここはコードを直さなくても結果が変わるところ。 既定値 clearMocks が true。 Temporal もモック対象。 アサーション

    await 漏れは失敗。 expect.poll はタイムアウトで reject。 上げたあとにテストが落ちたら、まずこの4つを疑ってください。 今ココ おわりに 6/6