`bun:test` lets you change what time it is in your tests. This was introduced in Bun v0.6.13. This works with any of the following: - `Date.now` - `new Date()` - `new Intl.DateTimeFormat().format()` Timers are not impacted yet, but may be in a future release of Bun. ## `setSystemTime` To change the system time, use `setSystemTime`: ```ts import { setSystemTime, beforeAll, test, expect } from "bun:test"; beforeAll(() => { setSystemTime(new Date("2020-01-01T00:00:00.000Z")); }); test("it is 2020", () => { expect(new Date().getFullYear()).toBe(2020); }); ``` To support existing tests that use Jest's `useFakeTimers` and `useRealTimers`, you can use `useFakeTimers` and `useRealTimers`: ```ts test("just like in 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("unlike in jest", () => { const OriginalDate = Date; jest.useFakeTimers(); if (typeof Bun === "undefined") { // In Jest, the Date constructor changes // That can cause all sorts of bugs because suddenly Date !== Date before the test. expect(Date).not.toBe(OriginalDate); expect(Date.now).not.toBe(OriginalDate.now); } else { // In bun:test, Date constructor does not change when you useFakeTimers expect(Date).toBe(OriginalDate); expect(Date.now).toBe(OriginalDate.now); } }); ``` {% callout %} **Timers** — Note that we have not implemented builtin support for mocking timers yet, but this is on the roadmap. {% /callout %} ### Reset the system time To reset the system time, pass no arguments to `setSystemTime`: ```ts import { setSystemTime, beforeAll } from "bun:test"; test("it was 2020, for a moment.", () => { // Set it to something! setSystemTime(new Date("2020-01-01T00:00:00.000Z")); expect(new Date().getFullYear()).toBe(2020); // reset it! setSystemTime(); expect(new Date().getFullYear()).toBeGreaterThan(2020); }); ``` ## Set the time zone To change the time zone, either pass the `$TZ` environment variable to `bun test`. ```sh TZ=America/Los_Angeles bun test ``` Or set `process.env.TZ` at runtime: ```ts import { test, expect } from "bun:test"; test("Welcome to California!", () => { process.env.TZ = "America/Los_Angeles"; expect(new Date().getTimezoneOffset()).toBe(420); expect(new Intl.DateTimeFormat().resolvedOptions().timeZone).toBe( "America/Los_Angeles", ); }); test("Welcome to New York!", () => { // Unlike in Jest, you can set the timezone multiple times at runtime and it will work. process.env.TZ = "America/New_York"; expect(new Date().getTimezoneOffset()).toBe(240); expect(new Intl.DateTimeFormat().resolvedOptions().timeZone).toBe( "America/New_York", ); }); ``` '>dave/remove-native-event Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/test/js/web/timers/setTimeout-unref-fixture-2.js (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-10-09fix(AbortSignal/fetch) fix AbortSignal.timeout, fetch lock behavior and fetch...Gravatar Ciro Spaciari 29-61/+303
2023-10-09Fix npm tag for canary bun-types, againGravatar Ashcon Partovi 2-56/+10
2023-10-09Add Fedora build instructions to development.md (#6359)Gravatar otterDeveloper 1-0/+10
2023-10-09added commands (#6314)Gravatar babar 1-1/+2
2023-10-09Update README.md (#6291)Gravatar TPLJ 1-1/+1
2023-10-09docs: fixing a couple typos (#6331)Gravatar Michael Di Prisco 2-2/+2
2023-10-09fix: support uint8 exit code range (#6303)Gravatar Liz 2-2/+11
2023-10-09Fix array variables preview in debugger (#6379)Gravatar 2hu 1-1/+4
2023-10-07feat(KeyObject) (#5940)Gravatar Ciro Spaciari 106-67/+9342
2023-10-07Exclude more filesGravatar Jarred Sumner 1-1/+1
2023-10-07Exclude more filesGravatar Jarred Sumner 1-1/+2
2023-10-07Update settings.jsonGravatar Jarred Sumner 1-1/+2
2023-10-07Update settings.jsonGravatar Jarred Sumner 1-2/+3
2023-10-06fix a couple install testsGravatar Dylan Conway 1-8/+8
2023-10-06formatGravatar Dylan Conway 1-1/+2
2023-10-06Fix memory leak in fetch() (#6350)Gravatar Jarred Sumner 1-2/+0
2023-10-06[types] allow onLoad plugin callbacks to return undefined (#6346)Gravatar Silver 1-1/+1
2023-10-06docs: `file.stream()` is not a promise (#6337)Gravatar Paul Nodet 1-1/+1