我正在尝试使用开玩笑来模拟一下矩库的格式功能。我的测试文件中包含以下代码。
app.spec.js :
jest.mock('moment', () => {
const moment = () => ({
format: () => mockedTime
});
moment.tz = {
setDefault: () => {}
};
moment.tz.setDefault('Asia/Singapore');
return moment;
});
app.js :
moment.tz.setDefault(TIMEZONE);
moment().format('YYYYMMDD');
它正在生成以下输出:
- "date": "20190825", // mocked date
- "date": "20190827", // result value
预期输出应为:
- "date": "20190825", // mocked date
- "date": "20190825", // result value
有人可以帮助我指出代码有什么问题吗?
谢谢。
答案 0 :(得分:1)
您不是在format
上而是在moment
的结果上呼叫moment()
。
jest.doMock('moment', () => {
const moment = () => ({
format: () => mockedTime,
})
moment.tz = { // prevent 'Cannot read property of undefined'
setDefault: () => {},
}
return moment
});
这样可以吗,还是您需要在应用中进行更复杂的模拟,包括时区?
答案 1 :(得分:1)
模拟“ moment-timezone”,而不是“ moment fixed”。
jest.mock('moment-timezone', () => {
const moment = () => ({
format: () => mockedTime
});
moment.tz = {
setDefault: () => {}
};
moment.tz.setDefault('Asia/Singapore');
return moment;
});
答案 2 :(得分:0)
可用的答案不适用于我的情况。然而,模拟基本的Date.now
函数是因为这个答案表明:https://stackoverflow.com/a/61659370/6502003
Date.now = jest.fn(() => new Date('2020-05-13T12:33:37.000Z'));