Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 使用jest测试useInterval钩子时不注册计时器_Javascript_Reactjs_Jestjs - Fatal编程技术网

Javascript 使用jest测试useInterval钩子时不注册计时器

Javascript 使用jest测试useInterval钩子时不注册计时器,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,我知道还有很多关于setInterval和jest的问题。我已经阅读了所有我能找到的,我已经阅读了文档,我认为以下应该是可行的,但它没有: //useInterval.js 从“React”导入React,{useffect}; /** *在一个时间间隔内调用函数。注销卸载组件时的间隔 *@param{function}回调要执行的函数 *@param{Array}dependencyArray要传递给useffect的依赖项数组(因为这就是这个钩子)。对此要非常小心,unfor *@param

我知道还有很多关于
setInterval
和jest的问题。我已经阅读了所有我能找到的,我已经阅读了文档,我认为以下应该是可行的,但它没有:

//useInterval.js
从“React”导入React,{useffect};
/**
*在一个时间间隔内调用函数。注销卸载组件时的间隔
*@param{function}回调要执行的函数
*@param{Array}dependencyArray要传递给useffect的依赖项数组(因为这就是这个钩子)。对此要非常小心,unfor
*@param{number}intervalInMs
*@param{boolean}如果函数也应立即运行,则立即运行。如果为false,该函数将仅在intervalInMs通过后运行
*/
常数useInterval=(
回拨,
依赖数组,
间伐期,
立即运行=真
) => {
useffect(()=>{
//计划间隔
const intervalHandle=setInterval(回调,intervalInMs);
//立即运行函数
如果(立即运行){
回调();
}
return()=>clearInterval(intervalHandle);
},[…dependencyArray,intervalInMs]);
};
导出默认使用间隔;
//useInterval.test.js
从“@testing library/react hooks”导入{renderHook,act}”;
从“./hooks/useInterval”导入useInterval;
描述(“useInterval挂钩”,()=>{
让我们回拨;
在每个之前(()=>{
callback=jest.fn();
});
以前(()=>{
开玩笑。使用faketimers();
});
之后(()=>{
callback.mockRestore();
开玩笑,开玩笑;
});
毕竟(()=>{
jest.useRealTimers();
});
它(“反复调用回调”,async()=>{
const{result}=renderHook(()=>useInterval(回调,[],15));
expect(result.current).toBeUndefined();
期望(设置间隔)。已被调用的时间(1);
期望(回调)。已回调时间(1);
expect(jest.getTimerCount()).toEqual(1);//不,测试失败,收到预期的1:0
笑话:提前计时(10);
期望(回调)。已回调时间(1);
笑话:提前计时(5);
expect(callback).toHaveBeenCalledTimes(2);//如果注释掉GetTimeCount,则此操作将失败,预期:2收到:1
});
});
我还尝试将
jest.advancetimerbytime
包装成
act
act(()=>jest.advancetimerbytime(10))
,但这不会改变输出

这件事我有什么遗漏吗?钩子在组件中使用时不起作用