我有一个时差功能,它获取一个日期,并计算与当前时间和返回时间的差,例如:
4 days ago
现在,我在带有一些单元测试和快照测试的网页上使用了此功能。
快照测试每天都会失败,因为明天的差异将是5 days ago
在这种情况下我该怎么办?
更新:输入我的伪代码
const timeDiff = gTime => {
return (currentTime - gtime)
};
此功能将在我的网页,组件,评论部分和...中调用 因此我所有组件的快照测试都将失败。
答案 0 :(得分:1)
您可能有2个选择:
1-考虑是否有空输入(或类似的东西),在这种情况下,组件将返回什么,因此通过更改函数,可以为函数提供空输入并期望获得预期的结果。 / p>
const timeDiff = gTime => {
if(!gTime) return "";
return (currentTime - gtime) };
// ------------test---------------
timeDiff(null)
2-提供一个将返回预期结果的输入,例如,在您的方案中,您可以将当前时间作为输入(作为模拟数据),这样每次您得到的结果都会有0秒的差异。
const timeDiff = gTime => {
return (currentTime - gtime)
};
// ------------test---------------
mockData = getCurrentTime()
timeDiff(mockData)
答案 1 :(得分:0)
您需要模拟Date
对象,以便它始终返回同一时间。
https://jestjs.io/docs/en/snapshot-testing#2-tests-should-be-deterministic
答案 2 :(得分:0)
我完全找到了答案。 我使用第三方库进行时间操作。我在我的react组件内部使用了这个库(考虑在js文件中导入)。
所以我无法模拟该库的数据。
最终,我决定从文件中删除该第三库的导入,并将一个函数(在react.js中称为props)传递给我的组件。
现在,我可以轻松地将模拟数据传递到此组件,并且解决了我的问题。