开玩笑的嘲笑日期 [英] Mocking date in jest
本文介绍了开玩笑的嘲笑日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个名为 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
更多信息在这里:
- https://dmitripavlutin.com/when-请勿在javascript/ 中使用箭头功能
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
这篇关于开玩笑的嘲笑日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文