如何与 React Test Renderer / Jest 渲染的组件交互

2023-12-30

我正在使用 Jest 和快照测试。我想做的是渲染一个组件ReactTestRenderer,然后模拟单击其中的按钮,然后验证快照。

ReactTestRenderer 返回的对象create呼叫有一个getInstance函数允许我直接调用它的方法,但它似乎不适用于 ReactTestUtils 中的任何 find/scry 方法。

我可以手动遍历树并单击按钮,但似乎必须有更好的方法:

import React from 'react';
import ReactDOM from 'react-dom';
import MyCounter from './MyCounter';
import renderer from 'react-test-renderer';
import {Simulate, findRenderedDOMComponentWithClass} from 'react-addons-test-utils';

it('should render 0', () => {
  const component = renderer.create(<MyCounter/>);
  const inst = component.getInstance();

  // Calling methods directly works, but that's not the same as
  // simulating a click on the button...
  inst.increment();

  // This also works, but it's awfully verbose...
  component.toJSON().children[1].props.onClick();

  // I'm looking for something like...
  //   inst.find('.increment').click()
  // or:
  //   Simulate.click(inst.find('.increment'))
  // or:
  //   Simulate.click(findRenderedDOMComponentWithClass(inst, 'increment'))

  // Finally, verify the snapshot
  expect(component.toJSON()).toMatchSnapshot();
});

这样的事情存在吗?


我知道这是一个老问题,但如果您仍然需要答案,您应该使用component.root(代替component.getInstance()),其中有一个find()方法就可以了。然而,这与酶的不同find()因为它不接受选择器,而是接受一个函数,该函数将元素作为参数。所以它看起来像这样:

it('should render 0', () => {
  const component = renderer.create(<MyCounter/>);
  const root = component.root;

  const incrementButton = root.find(element => element.props.className === 'increment');
  incrementButton.props.onClick();

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

如何与 React Test Renderer / Jest 渲染的组件交互 的相关文章

  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • 如何在 OS X 上的旧版 Safari 中测试我的网站?

    苹果似乎不提供旧版本 Safari 的下载 我什至不确定它们是否会安装在 Mac OS X 上 因为 Safari 似乎是操作系统的一部分 就像 Windows 上的 Internet Explorer 一样 有什么方法可以在旧版本的 Sa
  • 使用 React JS 进行多个文件上传

    我试图弄清楚如何在 React JS 中循环多个文件上传 最终我希望能够循环遍历每个文件 以便我可以判断是否仅上传 PNG JPG 和 MP3 文件 我还希望 PNG JPG 文件限制为 5MB MP3 文件限制为 2MB 到目前为止 我不
  • 使用 Redux React Native:状态更改未显示在控制台中

    当我把console log test 我的减速器中的语句 当调用操作时我可以在控制台中看到它们 但我没有在控制台中看到 redux NEXT STATE PREV STATE 内容 有什么基本的东西我可能会错过吗 在下面的代码中 我并没有
  • React 组件渲染被调用两次而不改变状态

    我正在渲染一个简单的反应组件 其中没有设置状态和道具 我在渲染函数中仅将文本记录到控制台一次 但它被记录了两次 rendering counter rendering counter 下面是counter js组件的代码 import Re
  • React JS“this”没有按预期工作

    我有下面的代码 save function var this this console log this refs itemText this setState isEditing false function console log In
  • jest 无限期挂起,不运行任何测试

    每次我运行 jest 时它都不会运行任何东西 我已经让计数器任意升高 我用 no cache 运行 jest jest debug 输出如下 configs automock false browser false cache true c
  • Hooks setState 总是落后一步

    我使用了 useState 钩子 应该在每次下拉按钮的值发生变化时触发设置状态方法 在钩子中 但设置状态总是落后一步 我已经看到了使用基于类的组件的传统 setState 方法的解决方案 但是如何使用钩子解决此问题useState
  • subscribe() 内的 Expect() 失败不会将测试标记为无效

    我们最近升级到 Angular 6 0 3 RxJs 6 2 0 和 jest 23 1 0 从 RxJS 5 和 Angular 4 升级 Jest 和 RxJ 似乎存在问题 因为订阅块内的期望语句失败不会将测试标记为失败 这是一个最小的
  • 使用 jest 测试 catch 块

    我如何测试下面我使用类的代码片段中的 catch 块 示例 js class Sample constructor data this resolvedData this retrieveData data retrieveData dat
  • “成功”的 Netlify 表单提交未显示在仪表板中

    我有一个 create react app 应用程序部署到 Netlify 并且我正在使用反应网络化形式 https www npmjs com package react netlify form呈现我的表格 我的表单已在我的 Netli
  • 如何编写具有依赖状态的 redux 减速器

    我正在开发一个 React Redux 应用程序 它允许将 小部件 添加到页面并在 2D 空间中进行操作 要求可以同时选择和操作多个小部件 我当前状态树的简化版本如下所示 widgets widget 1 x 100 y 200 widge
  • 如何在 React 应用程序中访问浏览器 cookie

    这个问题有点受欢迎 但我没有这么幸运 我主要是一名后端人员 所以我一边工作一边学习 我有一个名为connect sid和价值12345 我在 chrome 开发工具中看到了这一点 在我的反应应用程序中 我控制台记录了document coo
  • 从 git repo 拉取后出现白屏死机(React JS、Nginx)

    每当我从 master 分支执行 git pull 到服务器上时 我所有的 React 文件似乎都消失了 屏幕变成白色 我发现的临时解决方法是 删除浏览器 cookie 缓存和站点历史记录 然后关闭浏览器并重试 删除node modules
  • 有条件地使用 Node.js 提供两个 React 构建

    我有两个基于设备向客户端提供服务的 React 应用程序 我使用 Node js 和 Express 来实现这一点 我借了static资产处理部分来自这个问题在这里 https stackoverflow com questions 644
  • React JS - 如何将 json 数据绑定到下拉列表

    我有一个 React JS 文件 我正在尝试将数据绑定到下拉列表 数据存储在以下测试 API json 文件中 https api myjson com bins okuxu https api myjson com bins okuxu
  • TinyMCE 输入以相反顺序写入

    我面临这个问题 每当我输入 TinyMCE 时 我的光标会自动向左移动 最终从右向左写入文本 它只发生在我部署的应用程序中 但如果我在我的机器上本地运行代码 同样可以正常工作 发生这种情况的任何可能原因 相同的屏幕截图 https i st
  • 如何使用 Doctrine 实体创建测试而不保留它们(如何设置 id)

    我正在为 Symfony2 项目进行测试 现在我正在寻找一种方法来创建涉及实体对象的测试而不保留它们 问题是 id是一个私有字段 并且没有设置器 我可以创建新对象并设置一些属性 但我无法测试涉及的任何内容getId calls entity
  • Jest 中从未调用图像 onLoad 处理程序

    我正在尝试使用 Jest 测试将 dataUrl 加载到图像中 我正在使用 JSDOM 并按照说明添加resources usable 作为一个选项 如果我直接从 Node 运行该代码 则该代码可以工作 但是当我尝试在 Jest 中运行它时
  • React.js this.props.data.map() 不是一个函数

    我正在搞乱反应并尝试解析和渲染 json 对象 现在 我只是使用硬编码对象设置它以进行测试 而不是从 ajax 调用中获取它

随机推荐

  • 如果在 CoordinatorLayout 中设置了anchorView,则浮动操作按钮不会与 Snackbar 一起浮动

    当我设置 Snackbar anchorView adContainer 时 我的 FAB 不浮动 val snackbar Snackbar make main content Item Deleted Snackbar LENGTH I
  • 模拟ggplot2默认调色板

    What function can I use to emulate ggplot2 s default color palette for a desired number of colors For example an input o
  • 在Windows10上为GitKraken配置合并工具

    我下载了 GitKraken 来处理 Git 存储库 它非常适合我需要的一切 但我无法将其配置为使用 WinMerge 或 Meld 等合并工具 当程序发现冲突时 它会显示一个按钮 上面写着 在合并工具中打开 由于我尚未配置合并工具 因此我
  • 在 JavaScript 函数中传递字符串参数

    我试图将字符串传递给 JavaScript 函数 正如这里提到的 在 onclick 函数中传递字符串参数 https stackoverflow com questions 9643311 pass a string parameter
  • Windows批处理命令for循环设置环境变量

    我正在尝试找到一种方法来动态构建环境变量 其中包含应用程序的 WEB INF lib 文件夹下的 JAR 文件列表 这是我到目前为止所拥有的 但它每次都会覆盖自己 因此当到达循环末尾时 您只有变量中设置的循环中的最后一个文件 SETLOCA
  • Twitter API + OAuth:无法发送状态更新,收到 401

    我正在尝试使用 Twitter 的 API 和 OAuth 发送状态更新 新推文 我正在使用 Shannon Whitley NET 代码示例http www voiceoftech com swhitley p 681 http www
  • 创建 JavaScript 命名空间的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我还没有在互联网上找到在 JavaScript 中创建命名空间的通用方法 创建命名空间的最佳方法是什么 请列出特定方法可能存在的任何缺陷 fun
  • 手动实例化@InjectMock注解字段

    我浏览了一些博客 以了解 Mockito 注释工作原理的基础知识 然而 我面临着一个疑问 什么时候需要手动实例化带有注释的字段 InjectMocks i e InjectMocks A a new A 又何时依赖MockitoAnnota
  • jQuery ajax() POST 到 Slim PHP 框架

    使用 jquery mobile phonegap 尝试 POST 到 Slim 应用程序 我有以下代码 document on vclick test form function ajax type POST url http mydom
  • 在MySQL上模拟多维数组

    我有两个具有以下结构的表 文章 文章 ID 文本 标签 tag id article id 文本 如何通过一个查询选择所有文章和所有关联标签 据我所知 MySQL只能返回一个二维数组 所以我可以一个解决方案是将所有标签连接到文章选择结果的一
  • QML 使用计时器移动文本

    我需要在屏幕上从右到左连续创建移动文本 我已经使用它实现了QML Timer and Text元素 下面的代码工作正常 但我担心下面的代码会导致更多的 cpu 或内存使用 主要是因为计时器每 33 毫秒触发一次 我必须在应用程序中的位置和多
  • 使用 awk 遍历文件列表?

    我很陌生awk 但我正在寻找一种方法来迭代目录中的所有文件并执行一个简单的awk命令 我的命令是一个简单的替换 将所有制表符替换为两个空格 awk gsub t print 如何扩展以循环遍历目录并对所有文件执行命令 将文件传递至awk当然
  • spring JSP MVC 和 Thymeleaf MVC 的区别

    Spring JSP MVC 和 Thymeleaf MVC 有什么区别 哪一种是春季网页设计的最佳方式 它们都是 Spring MVC 的视图层 首先 最基本的区别是文件扩展名 jsp html 评论中的布拉尼斯拉夫是对的 JSP不是模板
  • 当匹配查询的所有文档的字段总和超过某个值时,如何触发 elastalert

    当匹配查询的所有文档的字段总和超过某个值时 是否可以触发elastalert 假设每个文档都有一个 价格 值 例如 当最后一天的 价格 值总和超过 200 时 是否可以触发 elastalert 示例文档 type transaction
  • 转换数据以适应正态分布

    我有一个比较容易理解的问题 我有一组数据 我想估计这些数据适合的程度标准正态分布 为此 我从我的代码开始 f p m p hist data 128 f p f p trapz m p f p x th min data 001 max d
  • 在 UIView 外部绘制阴影

    背景 我有一个UIView具有以下属性 阿尔法 1 背景颜色 白色 不透明度 0 35 圆角 阴影 Code 这就是我创建阴影的方法 UIView扩大 self layer masksToBounds false self layer sh
  • 对于iOS healthkit如何保存收缩压和舒张压值?

    这是在健康套件中保存血压数据的代码 HKUnit BPunit HKUnit millimeterOfMercuryUnit HKQuantity BPSysQuantity HKQuantity quantityWithUnit BPun
  • 在 PHP 中向日期添加三个月

    我有一个变量叫做 effectiveDate包含日期2012 03 26 我试图在此日期基础上增加三个月 但没有成功 这是我尝试过的 effectiveDate strtotime 3 months strtotime effectiveD
  • 按上下文获取所有标签以实现 acts-as-taggable-on

    We use https github com mbleigh acts as taggable on https github com mbleigh acts as taggable on对于我们的 Rails 应用程序 我们遇到了问题
  • 如何与 React Test Renderer / Jest 渲染的组件交互

    我正在使用 Jest 和快照测试 我想做的是渲染一个组件ReactTestRenderer 然后模拟单击其中的按钮 然后验证快照 ReactTestRenderer 返回的对象create呼叫有一个getInstance函数允许我直接调用它