首页 > 解决方案 > 用玩笑模拟多个反应自定义钩子

问题描述

我有一个自定义的 React 钩子,可以进行异步 api 调用并返回响应。实现如下:

  const {
    response,
    call,
    loading,
  } = useAsyncRequest({
    args: [collection, uid, schema],
    callFn: apiGetDocument,
  });

然后我可以用下面的玩笑轻松地模拟这个组件:

AsyncRequestManager
      .mockReturnValue(defaultAsyncHookReturnLoad)

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

AsyncRequestManager
      .mockReturnValueOnce(defaultAsyncHookReturnLoad)
      .mockReturnValueOnce(defaultAsyncHookReturnSave);

它适用于相同的渲染,但不适用于后续的重新渲染。

是否可以告诉 jest 按顺序返回一个值?

即类似于下面的内容(由于作用域变量而不起作用)

let i = 0;
AsyncRequestManager.mockImplementation(() => {
    i += 1;
    if (i % 3 === 0) return defaultAsyncHookReturnLoad;
    if (i % 3 === 1) return defaultAsyncHookReturnSave;
    if (i % 3 === 2) return defaultAsyncHookReturnDelete
    // i += 1;
});

编辑:感谢亚当的评论,上述解决方案似乎有效。欢呼!

标签: javascriptreactjstestingjestjsreact-hooks

解决方案


推荐阅读