如何使用类星体日期.Jest格式日期



我有这个函数:

import {date as DateUtils} from 'quasar'
export class FormatDate {
static dateTime(date: Date) : string {
return dateUtils.formatDate(date, "DD.MM.YYYY HH:mm:ss")
}
}

我想用Jest来测试,比如:

it('Should get the correct formatted date', () => {
const date = DateUtils.buildDate({year: 2021, month: 11, date: 28, hours: 12, minutes: 11})
expect(FormatDate.dateTime(date)).toEqual('28.11.2021 12:11:00')
})

但是,当我运行测试时,它给了我这个错误:

TypeError: Cannot read property 'date' of undefined
at Object.formatDate (/node_modules/quasar/dist/quasar.cjs.prod.js:6:132667)
at Function.dateTime (/src/components/FormatDate.ts:6:26)
at Object.<anonymous> (/test/jest/__tests__/FormatDate.spec.ts:19:34)
at Object.asyncJestTest (/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
at /node_modules/jest-jasmine2/build/queueRunner.js:45:12
at new Promise (<anonymous>)
at mapper (/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
at /node_modules/jest-jasmine2/build/queueRunner.js:75:41
at processTicksAndRejections (internal/process/task_queues.js:95:5)

有没有人知道如何解决这个问题?

通常这可以通过在本地值实例中配置类星体来解决:

import { Quasar } from "quasar";
import langEn from "quasar/lang/en";
const localVue = createLocalVue();
localVue.use(Quasar, {}, { lang: langEn });

类星体工程中也讨论过类似的问题。

但是,我很好奇是否有人有一个额外的解决方案。

因为我自己也有类似的问题,但在另一个上下文中。

通过一个糟糕的架构(请不要问为什么),我们的项目使用了vue组件上下文之外的日期助手。作为一个简单的功能帮助器的一部分。如:

const defaultDateFormat = (date: Date): string => formatDate(date, "whatever-pattern");

在此基础上运行测试会出现与作者描述的相同的问题。

前面描述的解决方案在这里不适用。

简而言之:

  • 在值组件之外使用类星体日期格式化器
  • 在此helper上运行jest测试

所以,如果有人有什么主意,我洗耳恭听。