【问题标题】:Should I verify that props were set after component mounts in my unit tests? (using Enzyme, Mocha, Chai)我应该在单元测试中验证组件安装后是否设置了道具? (使用酶、摩卡、柴)
【发布时间】:2019-11-25 14:47:51
【问题描述】:

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

我的团队坚持每个组件的单元测试文件都应该有以下测试:

beforeEach(() => {
   component = mount(<MyComponent />)
})

it('renders with correct properties', () => {
   component.setProps({
     height: 100,
     width: 500,
     placeholder: 'Some value here'
   })
   expect(component.prop('height')).to.equal(100)
   expect(component.prop('width')).to.equal(500)
   expect(component.prop('placeholder')).to.equal('Some value here')
})

测试到此结束。对我来说,这个测试看起来只是测试 React 设置了 props。我觉得我们可以相信 React 正在做的事情,而是应该测试我们如何使用 React 来渲染我们的组件。我宁愿测试道具值对其他道具、状态的影响,以及组件如何作为道具的结果呈现。

但我是新手,我的团队认为我的担心有误,所以我想我会检查一下:上述测试用例中是否有我遗漏的价值?这是好的做法吗?

相关问题

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

【问题讨论】:

  • 这绝对是一个无用的测试,除非你在组件中做一些非常奇怪的 hacky prop 操作
  • 此外,这个测试将更优雅地写成一个带有循环的函数,而不是一遍又一遍地写prop().toEqual
  • 一个真正有用的测试是查看渲染的输出是否符合您基于某些道具的期望

标签: reactjs unit-testing mocha.js enzyme chai


【解决方案1】:

完全同意——测试 React 库本身的行为是没有意义的。在我的团队中,我们使用 Jest 的快照测试作为初始基本测试来检查渲染,然后在此基础上进行大量状态转换测试;这可能对您有所帮助,因为您似乎正在寻找一种“在我们检查其他任何内容之前呈现在基本预期输出中的完整性检查”类型的测试。所以我们会像你所说的那样做mount,然后我们的期望是:

expect(toJson(component)).toMatchSnapshot();

通过执行toJson,与不执行toJson相比,您至少可以以更易于阅读的形式读取快照的输出。

proscons 可以将快照测试结合到您的项目中——有些人说这太过分了,有些人觉得它很有用。就我个人而言,我觉得看看我将来添加的任何代码是否会破坏现有的渲染,使我的单元测试真正有用并减少对手动测试的依赖是很有用的。阅读this thread,其中详细介绍了快照测试。

【讨论】:

  • 谢谢,@caladeve。我的团队评估了 Jest,并认为它没有提供足够的价值来采用另一种单元测试语言,所以我们坚持使用 Enzyme、Mocha 和 Chai。在 E/M/C 中是否有可能与您的 Jest 建议等效?
  • Jest 非常强大并且有很多社区支持(你不需要全部采用它来利用)。值得一试你自己的副业,因为听起来这个决定不在你的掌控之中。单独使用 Enzyme,我会使用 .html() 并将它返回的内容与包含我的输出的 index-test-render.html 之类的完整预期输出进行比较。或者,您可以将其与toContain('Some value here) 结合使用,这样至少您有一些渲染基础可以与道具进行比较。
猜你喜欢
  • 2016-09-10
  • 2018-05-24
  • 2016-12-24
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
相关资源
最近更新 更多