如何开玩笑地模拟 Date.toLocaleDateString ?

sch*_*gel 11 javascript unit-testing reactjs jestjs

我的 React 组件中有这个代码,它最终呈现一个 HTML:

new Date(createDate).toLocaleDateString()
Run Code Online (Sandbox Code Playgroud)

我的本地计算机和我们的构建计算机设置了不同的区域设置,因此该函数的结果不一致。因此,正如您所期望的,单元测试在我的机器上通过,但在构建机器上失败,反之亦然。

我想模拟“toLocalDateString”,以便它始终使用相同的区域设置,例如“en-US”,或者至少它始终返回相同的字符串。我们的测试框架是个笑话。我如何实现这个目标?

我在我的 test.spec.js 中尝试了这个,但它根本没有任何效果:

Date.prototype.toLocaleDateString = jest.fn().mockReturnValue('2020-04-15')
expect(component).toMatchSnapshot()
Run Code Online (Sandbox Code Playgroud)

我仍然在快照中得到相同的旧 toLocalDateString 实现,但不考虑我的模拟返回值。

Tar*_*lla 7

我可能有点晚了但希望对某人有帮助

let mockDate;

beforeAll(() => {
  mockDate = jest.spyOn(Date.prototype, 'toLocaleTimeString').mockReturnValue('2020-04-15');
});

afterAll(() => {
  mockDate.mockRestore();
});
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要模拟实现怎么办?我的意思是,实施取决于实际日期? (3认同)

Józ*_*cki 2

你能包起来吗

new Date(createDate).toLocaleDateString()
Run Code Online (Sandbox Code Playgroud)

在函数中,将其作为 prop 传递给组件,然后模拟它?