dayjs在Jest测试中使用时区时返回无效日期

rbl8hiat  于 2023-03-06  发布在  Jest
关注(0)|答案(1)|浏览(260)

(使用dayjs版本1.10.7)
我有这个文件date.js包含一个日期函数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,
}

isPrioritizedItemOverdue在应用程序中工作正常,但是当运行使用它的测试时,我得到了从dayjs().format({ timeZone: userTimezone })返回的Invalid Date

import date from '../date';

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

7kjnsjlb1#

这似乎是旧节点版本(节点16和更旧)的问题,新版本(至少节点18)可以正常工作。
节点18对Intl API进行了一些改进(https://nodejs.org/de/blog/announcements/v18-release-announce/#v8-10-1)

相关问题