reactjs - 如何在提供者之外访问 React Query `queryClient`?例如使 Cypress 测试中的查询无效

标签 reactjs cypress react-query

是否可以访问我的应用程序的 React Query React 之外的 queryClient?

在我的一些 Cypress 测试中,我获取或改变了一些数据,但之后我想使所有/部分 queryClient 缓存无效。

这可能吗?

我已尝试导入应用中使用的“相同”queryClient,但它不起作用。

ℹ️ 我在我的测试中包含这些 fetch/mutations 只是为了让我绕过用户通常会在已经有 Cypress 测试的应用程序中采取的复杂步骤。

最佳答案

您可以在窗口中添加对 queryClient 的引用,然后在测试中调用它的方法。

来自@АлексейМартинкевич 示例代码,

import { QueryClient } from "react-query";

const queryClient = new QueryClient();

if (window.Cypress) {           // only during testing
  window.queryClient = queryClient;
}

export queryClient;

在测试中

cy.window().then(win => {  // get the window used by app (window in above code)

  win.queryClient.invalidateQueries(...)  // exact same instance as app is using

})

我相信导入会给你一个新的实例,你必须传递一个对应用程序的事件实例的引用。


只需阅读您的评论,它就是这么说的 - 将答案作为代码示例。

关于reactjs - 如何在提供者之外访问 React Query `queryClient`?例如使 Cypress 测试中的查询无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69344045/

相关文章:

javascript - 在React中,到底什么时候决定重新渲染?

javascript - React - 下拉菜单悬停关闭太快

e2e-testing - Cypress e2e 测试 - 如何解决跨源错误?

javascript - 如何在 React-query 中使用惰性查询?

next.js - React Query 在 nextjs 中更改路由时重新获取数据

javascript - 如何国际化 React Native Expo 应用程序?

javascript - 被卡住加载 react 故事书

cypress - 如何在柏树上模拟长按按键?

javascript - 使用each()中的invoke()访问href属性 Cypress

javascript - 与异步自定义 react Hook 作斗争。如何等待一个钩子(Hook)的结果以在另一个钩子(Hook)中使用?