我应该使用 beforeEach() 进行安装并为每个测试设置 props 还是在每个测试开始时安装特定组件? (使用酶、柴和摩卡)

2023-12-28

我最近开始编程。我所在的团队使用 React 进行编程,并使用 Enzyme、Mocha 和 Chai 进行单元测试。请参阅下面的软件包版本。

当测试一个组件时,有多个用例需要不同的 prop 值,我应该在每个测试中使用 beforeEach() 然后 setProps() ,还是应该在开始时执行显式 mount() (或shallow())每次测试?有关系吗?

例如,我可以使用 beforeEach() 在没有任何 props 的情况下挂载,然后在每个测试中使用 setProps() ,如下所示(使用伪代码):

describe('MyComponent', () => {

   beforeEach(... let component = mount(<MyComponent />) ...)

   it('tests use case 1', () => {
      // set prop A = 123
      component.setProps({A: 123})
      // assert some stuff
   })

   it('tests use case 2, () => {
      // set prop A = 456 and B = 'foo'
      component.setProps({A: 456})
      component.setProps({B: 'foo'})
      // assert some stuff
   })

})

或者我可以在每个测试开始时进行特定于用例的安装,在安装中传递 props,如下所示:

describe('MyComponent', () => {

   it('tests use case 1', () => {
      ...mount(<MyComponent A=123 />)
      // assert some stuff
   })

   it('tests use case 2, () => {
      ...mount(<MyComponent A=456 B='foo' />)
      // assert some stuff
   })

})

每种方法的优点和缺点是什么?有最佳实践吗?

Packages

  • "酶": "^3.3.0",
  • "enzyme-adapter-react-16": "^1.1.1",
  • "摩卡": "^5.0.0",
  • “柴”:“3.5.0”

对于类组件有componentDidMount and constructor而对于功能组件来说,有useEffect(..., [])。所有这些事情都只被调用一次。

另一方面,对于方法 #2,仍然需要在单独的测试用例中测试 props 更新,以确保组件正确处理该问题。否则,当在不同的环境中使用相同的组件时,您可能会错过这种情况<Route>不获取导航数据(发生在componentDidMount only)

说如果你有

<Route path="/Album/:id/author" component={UserScreen} />
<Route path="/user/:id/" component={UserScreen} />

如果您可以直接从第一个导航到第二个,则意味着 React-Router 将不会重新创建UserScreen但只是更新已经渲染的实例。因此,使用方法#1,您将通过自动测试来覆盖这种情况。虽然方法 #2 需要您进行测试componentDidUpdate行为明确。

我不确定哪个更好,但想强调测试流程和实际项目流程之间可能会发生差异。

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

我应该使用 beforeEach() 进行安装并为每个测试设置 props 还是在每个测试开始时安装特定组件? (使用酶、柴和摩卡) 的相关文章

  • React router v6 和路由内页面的相关链接

    您好 我正在尝试使用 React Router 将项目更新到 v6 我了解了基础知识 但在相关链接方面遇到了困难 我们有一个页面 通过 id 呈现给定项目的参考文档 该文档可以使用同级 ID 链接到其他 同级 材料 换句话说 用户可以在文档
  • React中如何触发同级组件的函数?

    I am new to front end world and could not figure out how to trigger a function from a sibling component Lets say I have
  • 如何包装内在组件,保留大部分 Props?

    我想用我自己的 React 功能组件包装一个标准按钮 但我希望新组件的用户能够设置 几乎所有底层按钮的道具 当然 我想保持正确的打字 所以如果 WrappedButton 包含一个button then
  • 在 React Web 应用程序中使用 createjs-soundjs

    我想用https www npmjs com package createjs soundjs https www npmjs com package createjs soundjs在 React Web 应用程序上播放声音 我正常安装了
  • 寻找网站测试自动化的方法

    我们开发定制调查网站 我正在寻找一种方法来自动化这些网站的模式测试 调查通常包含许多复杂的规则和分支 这些规则和分支也会根据项目的响应方式而触发 所有调查在发布给客户之前都经过严格测试 此测试需要大量的手动工作 我想了解一些可以通过回答问题
  • 单元测试序列化有什么要点吗?

    我有一个类 它序列化一组我想要进行单元测试的对象 使用 XML 序列化 我的问题是 感觉我将测试 XML 序列化的 NET 实现 而不是任何有用的东西 我还有一个先有鸡还是先有蛋的场景 为了测试 Reader 我需要一个由 Writer 生
  • css-loader 不导入 .css 文件返回空对象

    从 css 文件导入样式 返回空对象 看来 css loader 无法正常工作 谁可以帮我这个事 请找到下面的参考文件 index js import React from react import style from header cs
  • React App 中的图像损坏

    我正在尝试访问 React 应用程序中的图像 当我运行代码时 我在网页上看到一个损坏的图像图标 我不确定我是否正在访问图像的正确路径 我的代码如下 import React Component from react class Header
  • 如何在react-三纤维中提取并播放动画

    嗯 我有 gltf 动画模型 我成功加载模型 但无法播放嵌入的动画 我想知道是否可以以任何方式解决它 顺便说一句 我正在反应中工作 先感谢您 在这里您可以找到型号https drive google com file d 1ZVyklaQu
  • 有条件地忽略 JUnit 4 中的测试

    好的 所以 Ignore注释适合标记不应运行的测试用例 但是 有时我想忽略基于运行时信息的测试 例如 如果我有一个并发测试 需要在具有一定数量核心的计算机上运行 如果这个测试在单处理器机器上运行 我认为仅仅通过测试是不正确的 因为它还没有运
  • 以编程方式更改 Redux-Form 字段值

    当我使用redux formv7 我发现没有办法设置字段值 现在在我的form 我有两个select成分 当第一个时 第二个的值就会很清楚select元件值改变 在类渲染中 div div site div div div div
  • 如何在 Gatsby 页面上包含本地 JavaScript?

    我是一个完全的 React 新手 我想这里有些基本的东西我不太明白 默认的 Gatsby 页面如下所示 有没有办法像这样使用本地 js 文件 我想要实现的是让反应忽略script js但仍然让客户端使用它 默认的 Gatsby 页面看起来像
  • 带换行符的 React/Momentjs 日期格式

    我有一个日期字符串 我想对其进行格式化 其中数字位于月份下 Jul 6 我尝试了几种不同的方法来添加新行
  • 我点击的号码没有出现在反应项目的屏幕上

    当我尝试在屏幕中呈现点击的数字时 该数字没有出现 但它确实可以在控制台中显示 我不知道如何修复它应该在屏幕上 号码 旁边应用的号码 import render from testing library react import React
  • Spring3/Hibernate3/TestNG:有些测试给出 LazyInitializationException,有些则没有

    前言 我在单元测试中遇到了 LazyInitializationException 的问题 而且我很难理解它 正如你从我的问题中看到的那样Spring 中的数据库会话 https stackoverflow com questions 13
  • React JS 服务器端问题 - 找不到窗口

    你好 我正在尝试在我的reactJS项目中使用react rte 我有服务器端渲染 每次我想使用这个包时 我都会得到 return msie 6 9 b test window navigator userAgent toLowerCase
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何在 webpack 中渲染嵌套的 SASS?

    采取以下CSS MyComponent color blue Button color red 以及以下 React 组件 import React from react import classes from MyComponent sc
  • 如何映射轮播的子项数组?

    我正在尝试将 Carousel 组件包装在映射对象数组周围作为组件的子级 目前我只能让映射创建映射对象的 1 个子对象 轮播需要像这样

随机推荐