【发布时间】:2019-10-18 21:11:21
【问题描述】:
我尝试模拟 moment() 以避免快照测试基于一天中的时间失败..
我的<Header /> 有一个功能,它使用moment() 来显示不同的问候(Hello、早安、晚安等)
我的测试功能:
jest.mock('moment', () => moment().month(11).date(24)); //Should give "happy xmas"
it("Match snapshop", () => {
act(() => {
container = shallow(<Header />);
});
expect(container).toMatchSnapshot();
});
但是当我运行测试时,我得到:
ReferenceError: moment_1 未定义
如果我删除 jest.mock(....) 测试运行,但结果取决于一天中的时间..
【问题讨论】:
-
我相信你最好不要模拟
moment,因为你必须在模拟中重新实现你的代码使用的所有方法(以一致的方式)。有很多事情要做。相反,您可以模拟全局Date/Date.now以返回陈旧值。 -
使用@skyboyer 的解决方案解决:jest.spyOn(global.Date, "now").mockImplementationOnce(() => new Date("2019-12-24T11:01:58.135Z" ).valueOf() );
标签: typescript testing jestjs