Jestjs 使用jest.useFakeTimers时如何在回调时断言

Jestjs 使用jest.useFakeTimers时如何在回调时断言,jestjs,settimeout,cleartimeout,usefaketimers,Jestjs,Settimeout,Cleartimeout,Usefaketimers,我试图了解如何正确地对我们现有的自定义去盎司方法进行单元测试: //我们要测试的函数 函数去盎司(func,等待=100){ 让超时; 返回(…参数)=>{ clearTimeout(超时); 超时=设置超时(()=>{ 应用函数(本,参数); },等等); }; } 以下是失败的Jest单元测试: description('DebounceExample',()=>{ 在此之前(开玩笑地说); 毕竟(开玩笑的用户计时器); 它('应该去盎司',()=>{ //给定 const data=‘C

我试图了解如何正确地对我们现有的自定义去盎司方法进行单元测试:

//我们要测试的函数
函数去盎司(func,等待=100){
让超时;
返回(…参数)=>{
clearTimeout(超时);
超时=设置超时(()=>{
应用函数(本,参数);
},等等);
};
}
以下是失败的Jest单元测试:

description('DebounceExample',()=>{
在此之前(开玩笑地说);
毕竟(开玩笑的用户计时器);
它('应该去盎司',()=>{
//给定
const data=‘Chuck Norris比你想象的要快’;
常数去BounceTime=5000;
const callback=jest.fn();
const debouncedFunction=debounce(回调,debounceTime);
//什么时候
去抖功能(数据);
//然后
expect(callback).not.tohavebeencall();
//什么时候
jest.runAllTimers();//jest.advanceTimersByTime(debounceTime);
//然后
expect(callback).toHaveBeenCalled();
});
});
失败:

Error: expect(jest.fn()).toHaveBeenCalled()

Expected number of calls: >= 1
Received number of calls:    0  Jest
我在这里也尝试过解决方法:没有成功

解决方法:到目前为止,我唯一能够测试它的方法是:

it('should declause-workaround',(done)=>{
//给定
const data=‘Chuck Norris比你想象的要快’;
常数去BounceTime=5000;
const callback=jest.fn((参数)=>{
//然后
expect(参数)、toEqual(数据);
完成();
});
const debouncedFunction=debounce(回调,debounceTime);
//什么时候
去抖功能(数据);
//然后
expect(callback).not.tohavebeencall();
//何时(请参阅回调实现中的“then”)
jest.runAllTimers();//jest.advanceTimersByTime(debounceTime);
});

由于代码看起来正常工作,您是否有可复制的回购协议?尝试设置codesandbox但没有成功:getting
jest.AdvanceTimesByTime不是一个函数
:不确定您设置了什么,但无法在那里运行任何命令。查看右侧空白面板,有两个选项卡,其中一个是测试。但并非所有的
Jest
功能都受支持,比如
runalltimer
。不过,您可以下载该示例并使用
npm run test
我确实尝试了您的代码,但工作正常,但考虑到您的代码看起来正常工作,您是否有可复制的repo?尝试设置代码沙盒,但没有运气:getting
jest.advanceTimersByTime不是一个函数
:不确定您设置了什么,但无法运行你可以在那里使用任意命令。看右边的空白面板,有两个选项卡,其中一个是测试。但并非所有的
Jest
功能都受支持,比如
runalltimer
。不过,您可以下载该示例并使用
npm run test
我确实尝试了您的代码,但效果很好