用玩笑嘲笑多个react定制钩子

时间:2020-09-23 12:39:02

标签: javascript reactjs testing jestjs react-hooks

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

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

然后我可以像下面这样开玩笑地轻松模拟该组件:

AsyncRequestManager
      .mockReturnValue(defaultAsyncHookReturnLoad)

如果我仅使用这些钩子中的一个,但是如果我使用了多个钩子(即1个用于加载,1个用于保存),则此方法有效,那么我必须分别模拟两个响应,如下所示:

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

这适用于相同的渲染,但不适用于后续的渲染。

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

即类似以下内容(由于作用域变量而无法正常工作)

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;
});

编辑:由于亚当的评论,上述解决方案似乎行之有效。哇!

0 个答案:

没有答案