首页 > 解决方案 > TypeError:无法读取未定义的属性“useGETForQueries” - GraphQL Hooks

问题描述

我正在为我的项目使用 graphQL 挂钩,我遇到了测试问题,它会呈现此错误:

TypeError: Cannot read property 'useGETForQueries' of undefined

它在属于搜索组件的这行代码中失败:

const [searchManual, { loading: searchLoading, data, error }] = useManualQuery(SEARCH_QUERY);

默认情况下useGETForQuereiesfalse,但不确定为什么在运行测试时会出现此错误。项目运行正常,只是测试用例。我已经明确添加了该变量的布尔值GraphQlClient

graphql拦截器JS文件

const gqlAxios = axios.create()
gqlAxios.interceptors.response.use(
  function (response) {
    if(response.status === 401 || response.status === 403 )
        window.location.href = config.api.LOGIN_URL;
    
    return response;
  },
  function (error) {
    console.log("responseError", error);
    return Promise.reject(error);
  }
)
gqlAxios.interceptors.request.use(
  function (config) {
    config = {
      ...config,
      headers: {
          ...config.headers,
          'session': getCookieValue()
      }
    }
    return config;
  }
)


const fixed = config.api.APP_GQL_HOST;
const url = fixed + 'graphql';

export const client = new GraphQLClient({ url, fetch: buildAxiosFetch(gqlAxios), useGETForQueries: false });

常量将client被导出index.js并用作ClientContext.Provider.

const Wrapped = (
  <ClientContext.Provider value={client}>
    <App />
  </ClientContext.Provider>
)

ReactDOM.render(
  Wrapped, document.getElementById('root')
);

这可能是来自 jsdom 的错误,这是运行测试的实际控制台错误:

console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
      Error: Uncaught [TypeError: Cannot read property 'useGETForQueries' of undefined]

如果是这样,如何解决?我只是想解决通过一个简单的测试用例:

it('Expect component in the document', () => {

        const { getByTestId } = render(<Search />);
        const component = getByTestId("test");
        expect(component).toBeInTheDocument();

    });

我需要添加额外的配置吗?我想使用msw,模拟服务工作者,但我遇到了这个错误,无法继续前进。有没有人遇到过这个错误graphql hooks?另外你对这个图书馆有什么体验?优点是轻巧,但在测试方面似乎对用户不友好。与阿波罗的任何比较。感谢您对这个问题的见解。

标签: reactjsgraphql

解决方案


推荐阅读