sajad torkamani

Suppose you have a calculateAge(dateOfBirth: string) function that takes a date of birth argument in the format DD/MM/YYYY and returns the age as a number.

To test the function, you can fake the current date in Jest using faker timers:

import { calculateAge } from './dateTimeHelpers'
import { DATE_FORMATS } from '../constants'

describe('dateTimeHelpers', () => {
  describe('calculateAge', () => {
    const dateOfBirth = '12/07/1993'

    beforeEach(() => {
      jest.useFakeTimers()
    })

    it('calculates age correctly when the birthday has passed this year', () => {
      jest.setSystemTime(new Date('2023-07-13'))

      expect(calculateAge(dateOfBirth, DATE_FORMATS.DAY_MONTH_YEAR)).toBe(30)
    })

    it('calculates age correctly when the birthday has not yet occurred this year', () => {
      jest.setSystemTime(new Date('2023-07-11'))

      expect(calculateAge(dateOfBirth, DATE_FORMATS.DAY_MONTH_YEAR)).toBe(29)
    })

    it('calculates age correctly on the birthday', () => {
      jest.setSystemTime(new Date('2023-07-12'))

      expect(calculateAge(dateOfBirth, DATE_FORMATS.DAY_MONTH_YEAR)).toBe(30)
    })

    afterEach(() => {
      jest.restoreAllMocks().useRealTimers()
    })
  })
})

Sources/related links

Tagged: Jest