动态快照测试

Dynamic Snapshot Testing

我有一个时差函数,它获取 日期 并计算它与当前时间的差异和 return 时差,例如:

4 days ago

现在,我在带有一些单元测试和快照测试的网页上使用了这个功能。 快照测试每天都会失败,因为明天差异将是 5 days ago

遇到这种情况我该怎么办?

更新:放上我的伪代码

const timeDiff = gTime => {
    return (currentTime - gtime) 
};

此函数将在我的网页、组件、评论部分和... 所以我所有组件的快照测试都会失败。

您需要模拟 Date 对象,以便它始终 returns 同时。

https://jestjs.io/docs/en/snapshot-testing#2-tests-should-be-deterministic

https://jestjs.io/docs/en/mock-functions

我完全找到了答案。 我使用第三方库进行时间操作。我在我的反应组件中使用了这个库(考虑在 js 文件中导入)。

所以我无法模拟此库的数据。

最终,我决定从我的文件中删除 导入这个第三个库,并将一个函数(在 react.js 中称为 props)传递给我的组件.

现在我可以轻松地将模拟数据传递给这个组件,我的问题就解决了。

您可能有 2 个选择:

1- 考虑如果你有一个空输入(或类似的东西),在这种情况下你的组件会是什么 return,所以通过改变你的函数你可以给你的函数一个空输入并期望得到预期的结果。

const timeDiff = gTime => {
    if(!gTime) return "";
    return (currentTime - gtime)  };   

// ------------test---------------

timeDiff(null)

2- 给出将 return 预期结果的输入,例如在您的场景中,您可以将当前时间作为输入(作为模拟数据),因此每次您都会得到 0 秒的差异你的结果。

const timeDiff = gTime => {
    return (currentTime - gtime) 
};

// ------------test---------------

mockData = getCurrentTime()
timeDiff(mockData)