DEV Community

Julio Lugo
Julio Lugo

Posted on

Test dates-related and time features using date-fns and Jest

So, one of the issues I was wondering when I started working with Jest was: "How can I test dates and times?" and I felt curious so I started Googling it. At the very beginning, my findings were zero to none and I felt quite down with it, so I decided to experiment on my own... Total failure again.

Image description

However, after hours of suffering and reading a bunch of random blogs across the web, I found a simple and straightforward way to achieve this. It starts simply with configuring a fixed TZ for all tests.

// In your jest.config.js
process.env.TZ = 'GMT'

module.exports = {
  // ...
}
Enter fullscreen mode Exit fullscreen mode

Then, in your .spec file, you need to alter your global Date object and define a jest function for the built-in now function, as follows:

const RealNow = Date.now

beforeAll(() => {
  global.Date.now = jest.fn(() => new Date('2019-04-07T10:20:30Z').getTime())
})

afterAll(() => {
  global.Date.now = RealNow
})

Enter fullscreen mode Exit fullscreen mode

Once you have it up and running, you can create a very simple test to make sure everything is alright

it ('should show time', () => {
      expect(getHumanizeDate('2000/01/03')).toEqual('today')

...
})
Enter fullscreen mode Exit fullscreen mode

And the code

import { isToday } from 'date-fns'

export const getHumanizeDate = (date: string): string => {
  const dateToCheck = new Date(Date.parse(date))

  return isToday(dateToCheck)
Enter fullscreen mode Exit fullscreen mode

Sources:

Top comments (0)