Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态快照测试_Javascript_Reactjs_Testing_Snapshot - Fatal编程技术网

Javascript 动态快照测试

Javascript 动态快照测试,javascript,reactjs,testing,snapshot,Javascript,Reactjs,Testing,Snapshot,我有一个time differences函数,它获取一个日期,并计算它与当前时间和返回时间的差异,如: 4天前 现在,我在一个带有单元测试和快照测试的网页上使用了这个函数。 快照测试每天都会失败,因为明天差异将在5天前出现 在这种情况下我能做什么 更新:把我的伪代码 const timeDiff = gTime => { return (currentTime - gtime) }; 此函数将在我的网页、组件、注释部分和。。。 因此,我的所有组件的快照测试都将失败。您需要模拟日

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

4天前

现在,我在一个带有单元测试和快照测试的网页上使用了这个函数。 快照测试每天都会失败,因为明天差异将在5天前出现

在这种情况下我能做什么

更新:把我的伪代码

const timeDiff = gTime => {
    return (currentTime - gtime) 
};
此函数将在我的网页、组件、注释部分和。。。
因此,我的所有组件的快照测试都将失败。

您需要模拟
日期
对象,使其始终返回相同的时间


您需要模拟
日期
对象,使其始终返回相同的时间


我完全找到了答案。 我使用第三方库进行时间操作。我在我的反作用组件中使用这个库(考虑JS文件中的导入)。 所以我无法模拟这个库的数据

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


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

我终于找到了答案。 我使用第三方库进行时间操作。我在我的反作用组件中使用这个库(考虑JS文件中的导入)。 所以我无法模拟这个库的数据

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


现在,我可以轻松地将模拟数据传递到此组件并解决我的问题。

您可能有两个选项:

1——考虑如果你有一个空的输入(或类似的东西),在这个场景中,你的组件会返回什么,所以通过改变你的函数,你可以给你的函数一个空的输入,并期望得到一个预期的结果。

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——考虑如果你有一个空的输入(或类似的东西),在这个场景中,你的组件会返回什么,所以通过改变你的函数,你可以给你的函数一个空的输入,并期望得到一个预期的结果。

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)


您不需要根据实际时间进行测试。时间是一个依赖项。@jonrsharpe是的,时间是一个依赖项,但此函数位于“我的注释”组件和其他组件上,这些组件导致无法对包含此时间差函数的所有页面进行快照测试。那么,您没有正确处理此依赖项。同样,不要根据实际时间进行测试。但是你可以用一个双重测试来代替它,或者,正如下面的答案所建议的,模拟时间本身。这有什么帮助呢?
currentTime
来自哪里?为什么您不能为测试目的更换它?为什么在测试组件时不能完全替换
timeDiff
?您不能根据实际时间进行测试。时间是一个依赖项。@jonrsharpe是的,时间是一个依赖项,但此函数位于“我的注释”组件和其他组件上,这些组件导致无法对包含此时间差函数的所有页面进行快照测试。那么,您没有正确处理此依赖项。同样,不要根据实际时间进行测试。但是你可以用一个双重测试来代替它,或者,正如下面的答案所建议的,模拟时间本身。这有什么帮助呢?
currentTime
来自哪里?为什么您不能为测试目的更换它?为什么在测试组件时不能完全替换
timeDiff
?这是一个错误的概念。我使用模拟数据,但问题仍然存在。因为我的函数会计算每秒都会改变的当前时间!!!模拟
Date
对象意味着在测试运行和调用函数之前用您控制的版本替换它,然后用原始版本替换它。您的函数认为它调用了一个普通的
Date
对象来获取当前时间,但实际上它调用了一个自定义的
Date
,它总是静态地返回相同的当前时间值。这是快照测试中一个非常常见的问题,所以他们在Jest文档中特别提到了这一点。阅读我在上面添加的第一个链接:)谢谢你的回复,但这不是我的答案。我知道时间和日期每秒钟都在变化,我必须嘲笑它们。我的问题是别的。这个函数已导入到我的组件(在ReactJS中),我不能从外部更改它并在测试文件中模拟它。你是否将模拟与依赖项注入混淆了?您可以模拟函数,以便在将它们导入组件文件时,它们会被您提供的函数替换,这是一个错误的概念。我使用模拟数据,但问题仍然存在。因为我的函数会计算每秒都会改变的当前时间!!!模拟
Date
对象意味着在测试运行和调用函数之前用您控制的版本替换它,然后用原始版本替换它。您的函数认为它调用了一个普通的
Date
对象来获取当前时间,但实际上它调用了一个自定义的
Date
,它总是静态地返回相同的当前时间值。这是快照测试中一个非常常见的问题,所以他们在Jest文档中特别提到了这一点。阅读我在上面添加的第一个链接:)谢谢你的回复,但这不是我的答案。我知道