使用jest的test.each与forEach循环

时间:2019-07-23 20:15:36

标签: javascript jestjs

我是否有理由更喜欢一种方法?以下是一些示例:

describe('some tests', () => {
  [1, 2, 3].forEach(num => {
    test(`${num}: test`, () => {
      doSomeTestStuff(num)
    }) 
  })

  // vs.

  test.each([1, 2, 3])('%s: test', (num) => {
    doSomeTestStuff(num)
  })
})

阅读test.each语法似乎有点困难,尤其是当您可以执行本机javascript迭代来实现似乎相同的效果时。拆卸/设置仍然以相同的方式发生(据我所知)。

1 个答案:

答案 0 :(得分:1)

好问题!

从表面上看,这两者基本上是等价的,但您可能想要使用 .each 的原因有几个。

  • 如果 forEach 中的期望失败,它将立即失败并停止执行。这让您对 forEach 中的其他测试是通过还是失败一无所知。使用 .each,它基本上是为数组中的每个项目编写一个单独且不同的测试。
  • 如果 forEach 中的期望失败,数组中的哪个项目导致失败并不总是很明显。在 .each 中,您会自动从唯一的测试名称中获取上下文。
  • 使用 .each,您可以使用 tagged template literals 轻松处理多个参数,并且随着参数的增长,.each 可以比具有任意值的数组更具表现力和可读性。
  • 正如我之前所说,.each 会为每个项目创建一个单独的测试,因此最终报告会让您看起来好像编写了比实际更多的测试。当您查看最终输出时,这只是一件让您感到满意的小事。