dayjs returning Invalid Date when using timeZone in Jest test

Viewed 191

(Using dayjs v 1.10.7)

I have this file date.js containing a date function isPrioritizedItemOverdue:

const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');

const timeZonePlugin = require('dayjs-ext/plugin/timeZone-custom');
const { populateTimeZones } = require('timezone-support/dist/lookup-convert');
const timeZoneData = require('./custom-data-2000-2032');
const LocalizedFormat = require('dayjs/plugin/localizedFormat');
const func = require('./func');

require('dayjs/locale/en-gb');
require('dayjs/locale/fr');

populateTimeZones(timeZoneData);

dayjs.extend(LocalizedFormat).extend(timeZonePlugin).extend(utc);

const isPrioritizedItemOverdue = ({ date, userTimezone }) => {
    if (date) {
        const todayInTimezone = dayjs().format({ timeZone: userTimezone });
        const startOfTodayInUtc = dayjs(
            `${todayInTimezone.substr(0, 10)}T00:00:00.000`)
            .utc()
            .toDate();
        const targetDateInUtc = dayjs(date).utc().toDate();
        return startOfTodayInUtc > targetDateInUtc;
    }
    return false;
};

module.exports = {
  isPrioritizedItemOverdue,
} 

The isPrioritizedItemOverdue works fine in the application, but when running a test that uses it I get Invalid Date returned from dayjs().format({ timeZone: userTimezone }):

import date from '../date';

test('isPrioritizedItemOverdue', () => {
    const result = date.isPrioritizedItemOverdue({
        date: '2022-01-01T00:00:00.000Z',
        userTimezone: 'Europe/London'
    });
    expect(result).toBeTruthy();
});
0 Answers
Related