javascript - 模拟 DayJs 默认函数及其链式方法

标签 javascript typescript mocking jestjs dayjs

我试图模拟 dayjs() 具有特定日期和时间的默认函数,并且还希望模拟其嵌套方法,即 UTC() & . 添加()
这是我迄今为止尝试过的:
abc.ts:

getEarliestDate() {
    const {
        minHour,
        maxHour
    } = operatingHours;
    const earliestDateTime = dayjs().add(sla + 1, 'minute');
    const earliestDateTimeUTC = earliestDateTime.utc();

    return dayjs().add(121, 'minute').format('YYYY-MM-DD HH:mm');
}
abc.test.ts:
import { abc } from '../../src/common/serviceFactory';
import dayjs from 'dayjs';

jest.mock('dayjs', () =>
  jest.fn((...args) => jest.requireActual('dayjs')(args.filter((arg) => arg).length > 0 ? args : '2020-08-12')),
);

jest.mock('dayjs', () => ({
  default: jest.requireActual('dayjs')(`2020-08-18 12:00:00`),
  extend: jest.fn(),
  utc: jest.fn((...args) => {
    const dayjs = jest.requireActual('dayjs');
    dayjs.extend(jest.requireActual('dayjs/plugin/utc'));

    return dayjs.utc(args.filter((arg) => arg).length > 0 ? args : '12:00:00').startOf('day');
  }),
  add: jest.requireActual('dayjs')(`2020-08-18 12:00:00`),
}));

describe('getEarliestDate Function', () => {
  it('should return earliest date response', () => {
    const earliestDate = abc.getEarliestDate();
    expect(earliestDate).toMatch(dayjs().add(121, 'minute').format('YYYY-MM-DD HH:mm'));
  });
但是得到这个: TypeError: dayjs_1.default is not a function任何帮助/建议表示赞赏。

最佳答案

对于 dayjs 的基本操作,此代码有效:

jest.mock('dayjs', () => jest.fn((...args) => jest.requireActual('dayjs')(args.filter((arg) => arg).length > 0 ? args : '2020-08-12')),);
当“2020-08-12”是您要模拟的日期时。

关于javascript - 模拟 DayJs 默认函数及其链式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63470910/

相关文章:

typescript - 如何在声明文件中声明只读属性?

perl - 有没有办法在 Perl 中模拟内置的 require 函数?

java - Python 模拟和单元测试最佳实践

tdd - 如何避免使用TDD创建不良设计

javascript - Android 平板电脑 - Chrome/ native 浏览器 : Address Bar and Fixed Height (100%) Issue

javascript - 需要一个从图像文件夹调用的灯箱画廊,没有缩略图,只需单击一下即可打开?

node.js - TypeScript 外部 Node 模块有时会转换为 module.exports 和导出

javascript - 使 webkit 动画在非 webkit 浏览器上工作

javascript - 如何检测设备是否有振动器?

reactjs - typescript :在接口(interface)中将函数作为类型传递