bun:test 를 사용하면 테스트에서 시간을 변경할 수 있습니다.
이는 다음 모두에서 작동합니다.
Date.nownew Date()new Intl.DateTimeFormat().format()
NOTE
타이머는 아직 영향을 받지 않지만 Bun 의 향후 릴리스에서 변경될 수 있습니다.setSystemTime
시스템 시간을 변경하려면 setSystemTime 을 사용하세요.
ts
import { setSystemTime, beforeAll, test, expect } from "bun:test";
beforeAll(() => {
setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
});
test("2020 년입니다", () => {
expect(new Date().getFullYear()).toBe(2020);
});Jest 의 useFakeTimers 와 useRealTimers 를 사용하는 기존 테스트를 지원하려면 useFakeTimers 와 useRealTimers 를 사용할 수 있습니다.
ts
test("jest 와 동일하게", () => {
jest.useFakeTimers();
jest.setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
expect(new Date().getFullYear()).toBe(2020);
jest.useRealTimers();
expect(new Date().getFullYear()).toBeGreaterThan(2020);
});
test("jest 와 다르게", () => {
const OriginalDate = Date;
jest.useFakeTimers();
if (typeof Bun === "undefined") {
// Jest 에서 Date 생성자가 변경됩니다
// 갑자기 Date !== Date before the test 가 되어 모든 종류의 버그를 일으킬 수 있습니다.
expect(Date).not.toBe(OriginalDate);
expect(Date.now).not.toBe(OriginalDate.now);
} else {
// bun:test 에서 useFakeTimers 를 사용해도 Date 생성자는 변경되지 않습니다
expect(Date).toBe(OriginalDate);
expect(Date.now).toBe(OriginalDate.now);
}
});시스템 시간 재설정
시스템 시간을 재설정하려면 setSystemTime 에 인수를 전달하지 마세요.
ts
import { setSystemTime, expect, test } from "bun:test";
test("순간 2020 년이었습니다.", () => {
// 무언가로 설정하세요!
setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
expect(new Date().getFullYear()).toBe(2020);
// 재설정하세요!
setSystemTime();
expect(new Date().getFullYear()).toBeGreaterThan(2020);
});jest.now() 로 목킹된 시간 가져오기
setSystemTime 또는 useFakeTimers 로 목킹된 시간을 사용할 때 jest.now() 를 사용하여 현재 목킹된 타임스탬프를 가져올 수 있습니다.
ts
import { test, expect, jest } from "bun:test";
test("현재 목킹된 시간 가져오기", () => {
jest.useFakeTimers();
jest.setSystemTime(new Date("2020-01-01T00:00:00.000Z"));
expect(Date.now()).toBe(1577836800000); // 2020 년 1 월 1 일 타임스탬프
expect(jest.now()).toBe(1577836800000); // 동일한 값
jest.useRealTimers();
});이는 새 Date 객체를 생성하지 않고 직접 목킹된 시간에 액세스해야 할 때 유용합니다.
시간대 설정
기본적으로 모든 bun test 실행의 시간대는 재정의되지 않는 한 UTC(Etc/UTC) 로 설정됩니다. 시간대를 변경하려면 bun test 에 $TZ 환경 변수를 전달하거나.
bash
TZ=America/Los_Angeles bun test또는 런타임에 process.env.TZ 를 설정하세요.
ts
import { test, expect } from "bun:test";
test("캘리포니아에 오신 것을 환영합니다!", () => {
process.env.TZ = "America/Los_Angeles";
expect(new Date().getTimezoneOffset()).toBe(420);
expect(new Intl.DateTimeFormat().resolvedOptions().timeZone).toBe("America/Los_Angeles");
});
test("뉴욕에 오신 것을 환영합니다!", () => {
// Jest 와 달리 런타임에 시간대를 여러 번 설정해도 작동합니다.
process.env.TZ = "America/New_York";
expect(new Date().getTimezoneOffset()).toBe(240);
expect(new Intl.DateTimeFormat().resolvedOptions().timeZone).toBe("America/New_York");
});