Apollo 的 MockedProvider 不为 withApollo 中包装的组件提供客户端

2023-12-28

在测试 withApollo 中包装的组件时,我使用 Apollo 文档中指定的 Apollo 的 MockedProvider,但是当酶尝试渲染该组件时,渲染器找不到clientMockedProvider 应该已经提供了。

我有一个使用的组件useQuery在阿波罗的背景下。

export const QUERY = gql`{ value }`
export const Component = withApollo(({ client ) => {
    const { data } = useQuery(QUERY)
    return <p>{ data }</p>
})

所以我想测试一下:

describe('Component', () => {
    const mocks = [{
        request: { query: QUERY },
        result: { data: 42 }
    }]
    const WrappingComponent = ({ children }) => <MockedProvider mocks={ mocks } addTypename={ false }>
        { children }
    </MockedProvider>
    WrappingComponent.propTypes = {
        children: PropTypes.any
    }
    const component = shallow(<Component />, { wrappingComponent: WrappingComponent })

    it('matches the snapshot', () => {
        expect(enzymeToJson(component)).toMatchSnapshot()
    })
}

在这种情况下,快照结果是

exports[`CruxProductSetup matches the snapshot 1`] = `
<ApolloConsumer>
  <Component />
</ApolloConsumer>
`;

不是我的组件,所以我做了一个技巧并尝试进入内部:

    const component = shallow(shallow(<Component />, { wrappingComponent: WrappingComponent }).get(0))

快照是:

exports[`Component matches the snapshot 1`] = `
<ContextConsumer>
  <Component />
</ContextConsumer>
`;

还是没用。我的组件还没有渲染。我再次使用这个技巧:

const component = shallow(shallow(shallow(<Component />, { wrappingComponent: WrappingComponent }).get(0)).get(0))

在拍摄快照之前,酶会抛出以下错误:

 FAIL  Component/__tests__/index.js
  Component
    ✕ encountered a declaration exception (75ms)

  ● Component › encountered a declaration exception

    Invariant Violation: Could not find "client" in the context of ApolloConsumer. Wrap the root component in an <ApolloProvider>.

      85 |     })
      86 |
    > 87 |     const component = shallow(shallow(shallow(<Component />, { wrappingComponent: WrappingComponent }).get(0)).get(0))
      88 |     // const component = shallow(shallow(shallow(<Component />, { wrappingComponent: WrappingComponent }).get(0)).get(0))
      89 |     // const component = shallow(shallow(shallow(<CruxProductSetup summaryPanel={ null } />, { wrappingComponent: WrappingComponent }).get(0)).get(0))
      90 |

      at new InvariantError (node_modules/ts-invariant/lib/invariant.esm.js:12:28)
      at invariant (node_modules/ts-invariant/lib/invariant.esm.js:24:15)
      at Object.children (node_modules/@apollo/react-common/lib/react-common.cjs.js:55:132)
      at Object.type (node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:612:30)
      at ReactShallowRenderer.render (node_modules/enzyme-adapter-react-16/node_modules/react-test-renderer/cjs/react-test-renderer-shallow.development.js:104:34)
      at node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:615:53
      at withSetStateAllowed (node_modules/enzyme-adapter-utils/src/Utils.js:99:18)
      at Object.render (node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:615:18)
      at new ShallowWrapper (node_modules/enzyme/src/ShallowWrapper.js:411:22)
      at shallow (node_modules/enzyme/src/shallow.js:10:10)
      at Suite.<anonymous> (Component/__tests__/index.js:87:23)
      at Object.<anonymous> (Component/__tests__/index.js:61:1)

"Could not find "client" in the context of ApolloConsumer. Wrap the root component in an <ApolloProvider>“?我以为就是这样MockedProvider正在做。

我的依赖项:

@apollo/react-testing: 3.1.3
enzyme: 3.11.0
graphql-tag: 2.10.1
jest: 22.4.4
react: 16.12.0
react-apollo: 3.1.3

我使用与你相同版本的@apollo/react-testing,而不是react-apollo,我使用@apollo/react-hooks,今天遇到了同样的错误。

只需将 @apollo/react-hooks 和 @apollo/react-testing 升级到 v4.0.0 就解决了我的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apollo 的 MockedProvider 不为 withApollo 中包装的组件提供客户端 的相关文章

  • 与 webpack 捆绑后,无法读取枚举的未定义属性

    我有一个 React 库 我想使用 Webpack 来构建它 该库是使用 Typescript 编写的 似乎一切正常 但由于某种原因枚举却不起作用 当我将库安装到我的 React 应用程序中时 我发现Cannot read properti
  • React - 通过 css 模块全局使用 Bootstrap

    反应和所有这些东西都很新 所以我在这里需要一些帮助 我最近添加了https github com gajus babel plugin react css modules https github com gajus babel plugi
  • ReferenceError:在玩笑测试中未定义 React

    我有以下行在浏览器中正确执行 eval Babel transform template presets react code 但是当我运行笑话测试时我得到ReferenceError React is not defined 我缺少什么
  • 使用 React Router 路由到另一个组件时 CSS 不会改变

    当我使用以下命令将我的应用程序路由到另一个组件时反应路由器 DOM https www npmjs com package react router dom CSS 不会改变 这是演示代码的简约版本 App js import React
  • 获取自定义域以在 Github Pages 上使用 React

    我已遵循将自定义域定向到 Github 端和 DNS 端的 Github 项目页面的所有指南 该项目的 Github Pages 托管在自定义域之前可以正常工作 但现在要么不起作用 要么只是正常的 Github Pages 工作 但自定义域
  • 在 onClick 处理程序中传递参数的最有效方法

    我正在使用内联箭头函数来更改onClick我的 React 组件中一些 div 的处理程序 但我知道这在性能方面不是一个好方法 客观来说 什么是最有效的设置方式onClick需要参数的处理程序 这是我尝试过的 1 内嵌箭头函数 change
  • ReactJS 在打字时延迟 onChange

    我需要更改状态以维护用户正在输入的字符串 但是我想延迟操作直到用户停止打字 但我不太清楚如何做到这两点 因此 当用户停止打字时 我希望触发一个操作 但不是在此之前 有什么建议么 使用 React Hooks 和 Function 组件 要保
  • 在react-router转换期间我应该如何更新redux存储?

    我面临着如何在发生反应路由器转换时更新存储的问题 在我当前的实现中 如下 在渲染下一页之前更新存储 当当前页面根据下一页的数据获取商店更新时 就会出现问题 1 当前页面毫无意义地呈现 它订阅了商店更新 因为更新的商店是针对下一页的 2 当前
  • 使用 Apollo-Client 对 GitHub API v4 进行身份验证

    与之前的版本一样 GitHub 的新 GraphQL API 需要使用令牌进行身份验证 那么 我们如何添加一个 Header 信息到HttpLink里面Apollo Client const client new ApolloClient
  • 设置时区 React-Datepicker

    我正在使用反应日期选择器 https www npmjs com package react datepicker让用户选择一个日期 但是 现在它使用本地时间 PDT 但我想对其进行硬编码以使用特定时区 PST 我尝试使用utcOffset
  • 如何为 NextAuth.js 创建自定义 UI(使用 AWS Cognito)?

    是否可以为 AWS Cognito 提供自定义 UINextAuth js https next auth js org 当我使用 NextAuth js 调用 API 时 我看到这个 主观上丑陋的 屏幕 只有一个按钮可以将您重定向到真正的
  • 样式组件如何影响性能?

    使用样式组件是否比样式表更会降低 Web 应用程序的速度 如果我关心性能并且没有任何依赖于 props 的样式 我是否应该放弃样式组件并使用样式表 当您有很多小组件时 同时使用样式化组件渲染 性能开销可能会很有意义 绝对值得测试以删除小元素
  • React 不响应按键事件

    我正在尝试实现一些非常基本的按键检测 但我根本无法让它工作 我有一个裸露的组件 应该在onKeyDown事件 但控制台中没有任何内容被注销 class App extends React Component constructor prop
  • 如何聚焦反应路由器链接

    我有一个用于搜索的输入框 并且希望能够按向下键将焦点从输入移动到列表的第一个s 看来我这里的东西不起作用 因为不是实际的 DOM 节点 我能够使用它来工作 a 代替 though let Link require react router
  • Nextjs 无法在生产环境中的“.next”目录中找到有效的构建

    我正在 docker 中运行我的应用程序 但我的生产构建和启动脚本仅在 docker 环境中失败 虽然node env开发在docker环境下运行良好 这是我的脚本 无法进行生产构建并启动服务器 我正在使用nodemon和babel bui
  • 使用 nginx 在云上部署 django 和 React

    我有一个 digitalocean 服务器 并且已经使用 Gunicorn 和 nginx 部署了 Django 后端服务器 如何在同一台服务器上部署 React 应用程序 您可以构建 React 应用程序并使用 Nginx 提供其静态文件
  • React Router v4 的优点

    除了能够在 NavLink 上设置 activeClassName 和 activeStyle 之外 还有什么理由使用NavLink over Link在您的网站上不需要活动状态 类的非导航元素 即不是页眉或页脚中的主导航 上创建指向其他路
  • Vue中有类似React.Fragment的东西吗?

    在 React 中我可以做这样的事情 parent component export default return div div 1 div div
  • 在 React 应用程序的 shell 脚本中设置环境变量

    我正在尝试在 powershell 和 bash 脚本中设置一些环境变量 并在 ReactJS 应用程序中读取它们 shell脚本很简单 env AUTHDOMAIN some domain com env AUTHCLIENTID bun
  • 如何从 Chrome React Dev Tools 打开 VS code 中的组件文件?

    是否可以右键单击 React Dev 工具下可见的组件 然后单击 在 IDE 中显示 从而在 VSCode 中打开该文件 这将是有益的 因为我不必去寻找该组件 我经常想在 VS Code 中查看某个组件的源代码 但由于组件的模块化复用 代码

随机推荐

  • Windows CE 上的 C# .NET 3.5 CF,更改 DataGrid 中的行背景颜色

    我正在使用 C NET 3 5 CF 为 Windows CE 进行开发 我正在处理数据网格 需要知道如何更改数据网格上行的背景颜色 提前致谢 你必须手动绘制它 这是一篇博客文章 http blogs msdn com b priozers
  • Redis 数据结构空间要求

    redis中排序集和列表的空间有什么区别 我的猜测是 排序集是某种平衡二叉树 列表是链表 这意味着除了我为每个值编码的三个值 键 分数 值 之外 尽管我会将链表的分数和值混合在一起 但开销是链表需要跟踪一个另一个节点 二叉树需要跟踪两个 因
  • 如何通过管道传输到 Next.js 13 api 响应?

    早些时候 我能够将另一个 api 调用的响应通过管道传输到 Next js api 响应 如下所示 export default async function req res prevent same site obfuscate orig
  • 音频会话“闪避”在 iOS 4 中中断...?

    我有一个应用程序 它使用 MPAudioPlayerController 来访问 iPod 音乐库 并使用 AVAudioPlayer 将音频覆盖在音乐之上 我用过本文档 http developer apple com iphone li
  • 使用 Android Studio 和 ndkBuild 无法到达 C++ 断点

    我试图在简单的 C 代码中达到断点 这里是 cpp include
  • 获取手动绘制点的坐标

    我有一个执行结果的图表ListPlot 功能 我可以通过将点移动到不同的位置来手动编辑此图 并使用添加新点绘图工具 http reference wolfram com mathematica tutorial InteractiveGra
  • dplyr case_when 具有动态案例数

    想要使用 dplyr 和case when将一系列指标列折叠为单个列 挑战是我希望能够折叠未指定 动态数量的列 考虑以下数据集 gear已被分成一系列指标列 library dplyr data mtcars mtcars mtcars g
  • 如何从一张画布复制到另一张画布

    这里是jsfiddle http jsfiddle net tahmid UjrJM 2 我把它作为我的源画布 HTML h1 Source Canvas h1
  • Expand.grid() 中的奇怪错误

    我已经创建并评估了对expand grid通过使用eval parse 简而言之 len lt 36 Text lt paste pos lt expand grid paste rep c TRUE FALSE len collapse
  • UILabel 中文本的像素宽度

    我需要绘制一个删除线的 UILabel 因此我将 UILabel 子类化并实现如下 implementation UIStrikedLabel void drawTextInRect CGRect rect super drawTextIn
  • 使用 OAEP 密钥加密的 S/MIME 封装邮件解密失败?

    使用 Java 和 BouncyCastle 我能够解密大量 S MIME 封装的消息 但当密钥加密算法为1 2 840 113549 1 1 7 id RSAES OAEP 解密失败 堆栈跟踪在这个问题的末尾 发生这种情况的行 conte
  • Pocketsphinx安装失败?树莓派零(Raspbian Jessie)

    这可能会被标记为重复项 但我没有任何运气 所以我们开始吧 我正在尝试使用Python2 7开发一个类似 Jarvis 的设置 我希望使用 Pocketsphinx 作为其中的一部分 我尝试在我的 Windows 10 机器上执行此操作 但
  • “.”在哪里? (点)来自使用 PHP 'scandir' 时

    我有点困惑 我正在构建一个 PHP 函数来循环输出指定目录中的图像 PHP dir bilder objekt 0 objekt nr thumbnail thumbnails scandir dir print r thumbnails
  • 如何在生成 PDF 文件下载时显示进度条,而不出现 IE“下载”警告

    我已经在客户端和服务器之间进行了通信 过程很简单 我正在向控制器发出 AJAX POST 请求 该控制器在文件系统中生成 pdf 上述请求成功后 将发出表单 GET 请求以取回 pdf 并打开标准浏览器 保存或打开 对话框 我之所以采用两步
  • C - fwrite 大于 4GB 的二进制文件

    我基本上是 C 新手 我有一个 64 位 Windows 7 配备 64GB RAM 和 240GB SSD 我使用的采集板将采集的数据存储在 2 个内部 FIFO 中 然后将数据传递到 RAM 这样我就有可能采集 60 GB 的数据 我无
  • 部署时字体未加载

    我创建了一个有角度的应用程序 它在本地环境中加载得非常好 所有样式和字体都被应用 但是当我部署它时 字体没有加载 无法弄清楚为什么 它没有在控制台中显示任何错误或警告消息 我正在导入所有 css 样式angular json文件如下 dem
  • Factorial 函数在 Python 中工作,对于 Julia 返回 0

    我在Python中定义了一个阶乘函数 如下所示 def fact n if n 1 return n else return n fact n 1 print fact 100 在 Julia 中如下 function fact n if
  • 更改日期格式javascript

    我正在从两个不同的 API 中提取一些数据 稍后我想要获取这些对象 但是 我得到两种不同的日期格式 这种格式 1427457730 和这种格式 2015 04 10T09 12 22Z 如何更改其中之一的格式 以便我可以使用相同的格式 ea
  • MSSQLSM 2008 奇怪的登录在 select 语句上失败

    我的SQL服务器上有多种用户 所有用户都可以登录服务器 然而 一个用户一旦登录就无法在特定视图上运行任何操作 选择 更改 编辑 但可以在所有其余视图上运行 用户设置与具有完全访问权限的另一个帐户相同 说实话 它们是相同的 对于无法从他的视图
  • Apollo 的 MockedProvider 不为 withApollo 中包装的组件提供客户端

    在测试 withApollo 中包装的组件时 我使用 Apollo 文档中指定的 Apollo 的 MockedProvider 但是当酶尝试渲染该组件时 渲染器找不到clientMockedProvider 应该已经提供了 我有一个使用的