我已经围绕moment.js
建立了一个日历,并且现在正在进行单元测试。
我解决的第一个问题是测试运行时日期将如何更改,因此我能够使用this guidance锁定当前时间。
目前,我陷入了一个错误:
我的代码有一行:const dateHeaders = moment.weekdaysShort();
通过实现模拟的moment().format()
,我基本上失去了该库的其余部分。
我的直接问题是我如何设置 Jest 以让我返回从moment.weekdaysShort();
获得的数组
我的更大问题是我是否走错了道路,是否应该提出另一种策略。
我尝试了失败的操作
weekdayShort
函数:const mockMoment = function() {
return {format: '2016–12–09T12:34:56+00:00'}
};
mockMoment['weekdaysShort'] = () => ['Sun', 'Mon', 'Tues']; // etc etc etc
jest.mock('moment', () => mockMoment);
__mocks__
文件夹中组装手动模拟。我并没有走太远,因为它开始感觉像我不得不将整个Moment.js库复制/粘贴到模拟中。尽管弄清楚他们如何做自己的工作很酷,但这是另一天的项目。 jest.spyOn
-不起作用,因为我没有在监视模块。 在这一点上,我正在考虑放弃通过props传递的数组的
Moment
函数。虽然我有信心可以解决这个问题,但感觉之后我很快就会遇到另一个障碍。先谢谢您的帮助。
最佳答案
刚刚发现我常用的模式是在2016 github thread中提供的,老实说,即使我不特别记得它,也可能是我找到它的地方:)
jest.mock('moment', () =>
const original = jest.requireActual('moment');
return {
__esModule: true,
default: {
...original,
...just the parts you want to mock
}
}
);