开玩笑的嘲笑日期 [英] Mocking date in jest

查看:76
本文介绍了开玩笑的嘲笑日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为 setMockDate 的函数,它看起来像:

I have function called setMockDate that looks like:

/**
 * @param {Date} expected
 * @returns {Function} Call to remove Date mocking
 */
const setMockDate = (expected: Date): AnyObject => {
  const RealDate = Date
  function MockDate(mockOverride?: Date | number) {
    return new RealDate(mockOverride || expected)
  }

  MockDate.UTC = RealDate.UTC
  MockDate.parse = RealDate.parse
  MockDate.now = () => expected.getTime()
  MockDate.prototype = RealDate.prototype

  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  global.Date = MockDate as any

  return () => {
    global.Date = RealDate
  }
}

export default setMockDate

,其用法类似于:

test('Should change date', () => {
  const mockDate = new Date('Feb 22, 2021 11:59:00')
  setMockDate(mockDate)
  expect(new Date()).toEqual(mockDate)
})

我想更改 setMockDate()中的 MockDate 函数,以使用类似以下的箭头功能:

I wanted to change the MockDate function in setMockDate() to use an arrow function like:

const MockDate = (mockOverride?: Date | number) => {
  return new RealDate(mockOverride || expected)
}

但是我得到 TypeError :

TypeError: Date is not a constructor

为什么更改为使用箭头功能时出现此错误?

Why I am getting this error when changing to use an arrow function?

推荐答案

MockDate 应该模仿 new Date(),它是一个构造函数>和箭头功能不能用作构造函数

MockDate is supposed to mimic new Date() which is a constructor and arrow function cannot be used as a constructor

更多信息在这里:

这篇关于开玩笑的嘲笑日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆