首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在jest中模拟react查询useQuery

如何在jest中模拟react查询useQuery
EN

Stack Overflow用户
提问于 2022-09-25 07:51:40
回答 1查看 381关注 0票数 0

我试图模拟出在useQuery中包装的异步函数中的axios:

代码语言:javascript
复制
import { useQuery, QueryKey } from 'react-query'


export const fetchWithAxios = async () => {
   ... 
   ...
   ...
   const response = await someAxiosCall()
   ...
   return data
}

export const useFetchWithQuery = () => useQuery(key, fetchWithAxios, {
    refetchInterval: false,
    refetchOnReconnect: true,
    refetchOnWindowFocus: true,
    retry: 1,
  })

我想用艾灸

代码语言:javascript
复制
  moxios.stubRequest('/some-url', {
      status: 200,
      response: fakeInputData,
    })

    useFetchWithQuery()

    moxios.wait(function () {
      done()
    })

但是我遇到了各种各样的问题,比如缺少上下文、存储等等,这些都是我在完全模仿过程中反复出现的。

EN

回答 1

Stack Overflow用户

发布于 2022-09-27 01:28:38

不要嘲笑useQuery,模拟Axios!

为了测试useQuery的使用情况,您应该遵循的模式如下:

代码语言:javascript
复制
const fetchWithAxios = (axios, ...parameters) => {
   const data = axios.someAxiosCall(parameters);
   return data;
}
export const useFetchWithQuery = (...parameters) => {
 const axios = useAxios();
 return useQuery(key, fetchWithAxios(axios, ...parameters), {
    // options
  })
}

useAxios从哪里来?您需要编写一个上下文来通过应用程序传递一个axios实例。

这将使您的测试最终看起来像这样:

代码语言:javascript
复制
const { result, waitFor, waitForNextUpdate } = renderHook(() => useFetchWithQuery(..., {
   wrapper: makeWrapper(withQueryClient, withAxios(mockedAxios)),
});
await waitFor(() => expect(result.current.isFetching).toBeFalsy());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73842840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档