javascript - 使用Jest,如何只在测试用例失败时才触发断点?

标签 javascript debugging jestjs webstorm

给定一个与此类似的测试用例:

test(“test”, () => {
    [1, 2, ..., 1000000].map(value => {
        expect(() => foo(value)).toThrow();
    });
})

是否有一种简单的方法来设置断点(例如在第 3 行),该断点仅在 expect 语句失败时触发?

换句话说,如果大数组中间某处的某个值导致测试失败,而大多数值不会触发异常条件,是否有某种方法可以设置断点如果测试通过则跳过但如果测试失败则中断?

这将使找出该值的测试失败的原因变得容易得多。

我正在使用 WebStorm,因此我对如何使用 Chrome/node、代码或 WebStorm 进行操作的答案感到满意。

最佳答案

如果您在编译时知道这些值,那么您可以使用 test.each为每个值创建独特的测试,让您清楚地看到哪个值失败了:

const tests = [[6], [7], [8]];

test.each(tests)(
  '%i should be even',
  v => {
    expect(v % 2).toBe(0);
  }
)

...报告两个测试通过(6 和 8)并在 7 上失败并带有描述性消息:

● 7 should be even

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  4 |   '%i should be even',
  5 |   v => {
> 6 |     expect(v % 2).toBe(0);
    |                   ^
  7 |   }
  8 | )

  at toBe (src/code.test.js:6:19)

如果测试数据直到运行时才可用并且断言很简单,那么您可以在 expect 行上设置一个条件断点:

const generateData = count => {
  const data = [];
  for (let i = 0; i < count; i++) {
    data.push(Math.floor(Math.random() * 10) + 1);
  }
  return data;
}

test('all values are even', () => {
  generateData(1000).map(v => {
    expect(v % 2).toBe(0);  // <= set breakpoint for v % 2 !== 0
  });
})

如果测试数据直到运行时才可用,并且很难设置条件断点,那么您可以将 expect 包装在 try/catch 中并放置catch 中的断点:

const generateData = count => {
  const data = [];
  for (let i = 0; i < count; i++) {
    data.push(Math.floor(Math.random() * 10) + 1);
  }
  return data;
}

test('all values are even', () => {
  generateData(1000).map(v => {
    try {
      expect(v % 2).toBe(0);
    }
    catch (err) {
      throw err;  // <= set your breakpoint here
    }
  });
})
如果断言失败,

expect 语句通过抛出一个 Error 来工作,所以这种方法简单地捕获并重新抛出 Error 但给你一个设置断点的地方,该断点将因失败的 expect 而被触发。

关于javascript - 使用Jest,如何只在测试用例失败时才触发断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57796432/

相关文章:

debugging - 无需调试即可启动

jquery - 使用 jQuery 进行 React 组件而不需要 - jest 单元测试

JavaScript 枚举示例 - 这是如何工作的?

python - VSCode 中是否有快捷方式在调试 REPL 中执行当前行或选择?

javascript - 我如何确定 Google map 的最大缩放级别整数?

performance - 大量的调试日志会减慢我的 (grails) web 应用程序的速度吗?

angular - 类型错误 : Cannot read property 'prototype' of undefined using jest

javascript - react : How mock functions and test component rendering with jest:

javascript - 我想删除 Anythingslider 中的开始/停止按钮,但保留其余的导航

javascript - 样式化提交按钮——Rails 应用程序