Skip to content

Bun のテストランナーは setSystemTime 関数を使用してシステム時刻をプログラムで設定することをサポートしています。

ts
import { test, expect, setSystemTime } from "bun:test";

test("1999 年を祝おう", () => {
  const date = new Date("1999-01-01T00:00:00.000Z");
  setSystemTime(date); // 今は 1999 年 1 月 1 日です

  const now = new Date();
  expect(now.getFullYear()).toBe(1999);
  expect(now.getMonth()).toBe(0);
  expect(now.getDate()).toBe(1);
});

setSystemTime 関数は、決定論的な「フェイククロック」を備えたテスト環境を構成するために ライフサイクルフック と組み合わせて一般的に使用されます。

ts
import { test, expect, beforeAll, setSystemTime } from "bun:test";

beforeAll(() => {
  const date = new Date("1999-01-01T00:00:00.000Z");
  setSystemTime(date); // 今は 1999 年 1 月 1 日です
});

// テスト...

システムクロックを実際の時刻にリセットするには、引数なしで setSystemTime を呼び出します。

ts
import { test, expect, beforeAll, setSystemTime } from "bun:test";

setSystemTime(); // 実際の時刻にリセット

Bun テストランナーでのモックの完全なドキュメントについては、ドキュメント > テストランナー > 日付と時刻 を参照してください。

Bun by www.bunjs.com.cn 編集