Skip to content

[Replacement]: mockdate #487

@joaopedrodcf

Description

@joaopedrodcf

Package to replace

vitest / node:test / bun:test

Suggested replacement(s)

Depending on the package that the user uses for testing

  • vitest ( setSystemTime )
  • bun:test ( setSystemTime )
  • node:test ( mock.timers )

Manifest type

preferred (lighter or more modern alternative package)

Rationale

mockdate https://npmx.dev/package/mockdate is used to mock dates and so it's useful in tests but for those cases all modern test-runners support mock of dates in a convenient way

https://nodejs.org/en/learn/test-runner/mocking#time

https://vitest.dev/guide/mocking.html#mock-the-current-date

https://bun.com/docs/guides/test/mock-clock

Availability

// node:test with mock.timers since 20.4.0
https://nodejs.org/en/blog/release/v20.4.0

import { test } from 'node:test'
import assert from 'node:assert'

test('freeze date', (t) => {
  t.mock.timers.enable({ apis: ['Date'], now: new Date('2026-01-01') })

  assert.strictEqual(
    new Date().toISOString(),
    '2026-01-01T00:00:00.000Z'
  )
})

vitest

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

test('freeze date', () => {
  vi.useFakeTimers()
  vi.setSystemTime(new Date('2026-01-01'))

  expect(new Date().toISOString())
    .toBe('2026-01-01T00:00:00.000Z')
})

bun:test

import { test, expect, mock } from "bun:test";

test("freeze time", () => {
  mock.timers.enable({ now: new Date("2026-01-01") });

  expect(new Date().toISOString())
    .toBe("2026-01-01T00:00:00.000Z");
});

Code example (optional)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions