如何在嘲笑测试时保留原始的npm模块功能能力?

时间:2019-03-17 19:57:48

标签: typescript unit-testing mocking jestjs momentjs

我正在尝试模拟“时刻”库,以便我可以运行快照测试,而不必担心通过moment()自动生成的“当前”时间戳来使快照失真。

但是,在不丢失库的常规功能的情况下,我似乎无法创建moment()的模拟版本。

这是我尝试过的:

src/tests/__mocks__/moment.ts
-----------------------------

const moment = require.requireActual("moment");

export default (timestamp: any = 0) => {
  return moment(timestamp);
};

此模拟背后的逻辑是,它应该对没有任何类型时间戳的moment()进行简单的覆盖调用,而不是让它生成当前时刻,而是将生成moment(0)时刻。所有其他功能都应保留,例如:moment("2010-05-10")应该为May 10th 2010生成一个有效时刻,而其他类似moment().startOf("month")的链接函数也应该仍然起作用。

但是,只要开玩笑在我的代码中遇到任何类型的moment()声明,它都会在终端测试输出中产生以下错误:

TypeError: moment is not a function

如何解决这个问题?

0 个答案:

没有答案