Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 用笑话模仿多个react自定义钩子_Javascript_Reactjs_Testing_Jestjs_React Hooks - Fatal编程技术网

Javascript 用笑话模仿多个react自定义钩子

Javascript 用笑话模仿多个react自定义钩子,javascript,reactjs,testing,jestjs,react-hooks,Javascript,Reactjs,Testing,Jestjs,React Hooks,我有一个定制的React钩子,它进行异步api调用并返回响应。 实施情况如下: const{ 答复,, 呼叫 加载, }=使用异步请求({ args:[集合、uid、架构], callFn:apiGetDocument, }); 然后,我可以用下面的笑话轻松地模拟此组件: AsyncRequestManager .mockReturnValue(defaultAsyncHookReturnLoad) 如果我只使用了其中一个钩子,但如果我使用了多个钩子(即1个用于加载,1个用于保存),那么我必

我有一个定制的React钩子,它进行异步api调用并返回响应。 实施情况如下:

const{
答复,,
呼叫
加载,
}=使用异步请求({
args:[集合、uid、架构],
callFn:apiGetDocument,
});
然后,我可以用下面的笑话轻松地模拟此组件:

AsyncRequestManager
.mockReturnValue(defaultAsyncHookReturnLoad)
如果我只使用了其中一个钩子,但如果我使用了多个钩子(即1个用于加载,1个用于保存),那么我必须分别模拟这两个响应,如下所示:

AsyncRequestManager
.mockReturnValueOnce(defaultAsyncHookReturnLoad)
.mockReturnValueOnce(默认异步hookReturnSave);
它适用于相同的渲染,但不适用于以下重新渲染

可以告诉jest按顺序返回值吗

i、 e类似于下面的内容(由于作用域变量而无法工作)

设i=0;
AsyncRequestManager.mockImplementation(()=>{
i+=1;
如果(i%3==0)返回defaultAsyncHookReturnLoad;
如果(i%3==1)返回defaultAsyncHookReturnSave;
如果(i%3==2)返回defaultAsyncHookReturnDelete
//i+=1;
});

编辑:多亏了亚当的评论,上述解决方案似乎奏效了。万岁

为什么
mockImplementation
不起作用?更重要的是,,调用实现时使用的参数作为
mockImplementation
中的参数可用,它们可用于确定要使用的返回值。
let i
不在mock实现范围内,因此它不会在mock实现中更新,这是因为i+=1永远不会执行,因为它是在返回声明之后。哈现在感觉很愚蠢,但这就成功了。谢谢!只是想澄清一下,所写的解决方案会导致脆弱的测试——这取决于实现细节——事实上,您按照这个顺序使用了3个钩子。如果您更改了实现,但没有更改结果,则测试失败。最好使用mockImplementation的参数来确定要使用的mock返回值,而不是调用它们的顺序。