1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Vitest】日時を固定してテストする方法【new Date()】

Posted at

はじめに

日時によって結果が変わる処理をテストをする場合、new Date()はテストの実行日時となりますが、Vitestではモックして日時を固定することができます。

vi.useFakeTimers()で日時のモックを有効化して、vi.setSystemTime()で日時を指定すると、テスト処理のnew Dateが指定した日時となります。

コード

import { afterEach, beforeEach, expect, test, vi } from 'vitest'

// カフェが営業中かどうか調べる関数
const checkOpenCafe = () => {
  const date = new Date()

  const hours = date.getHours()

  // 8時〜18時なら営業中、それ以外は営業時間外
  return 8 < hours && hours < 18
}

beforeEach(() => {
  // 日時のモックを有効化
  vi.useFakeTimers()
})

afterEach(() => {
  // 実際の日時に戻す
  vi.useRealTimers()
})

test('現在時刻が9時の場合を検証', () => {
  vi.setSystemTime(new Date('2023/01/01 09:00:00'))

  const isOpenCafe = checkOpenCafe()

  expect(isOpenCafe).toBe(true)
})

test('現在時刻が23時の場合を検証', () => {
  vi.setSystemTime(new Date('2023/01/01 23:00:00'))

  const isOpenCafe = checkOpenCafe()

  expect(isOpenCafe).toBe(false)
})

vi.useRealTimers()で実際の日時に戻さないと、次のテストに影響が出るため注意が必要です。

まとめ

Vitestで日時を固定してテストする方法をご紹介しました。vi.setSystemTime()で簡単に日時をモックできるので便利だなと思いました。

最後に

GoQSystemでは一緒に働いてくれる仲間を募集中です!

ご興味がある方は以下リンクよりご確認ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?