javascript - 测试函数以在 Jest 中抛出错误

标签 javascript unit-testing testing jestjs

我有这样一个功能要测试:

export const checkTextEmpty = stringArg => {
  if (typeof stringArg !== 'string') {
    throw new Error('Provide a string argument to checkTextEmpty function')
  }

  return stringArg.length === 0 || stringArg.trim() === ''
}

我想测试它是否正确抛出错误:

it(
   'should throw an error if passed argument is not a string',
      () => {
        const notStrings = [null, 4, [], {}, undefined, -5]

        notStrings.forEach(elem => {
          expect(checkTextEmpty(elem)).toThrow(Error)
        })
      }
    )

这是我终端的结果:

utils.js › checkTextEmpty util › should throw an error if passed argument is not a string

    Provide a string argument to checkTextEmpty function

      117 | export const checkTextEmpty = stringArg => {
      118 |   if (typeof stringArg !== 'string') {
    > 119 |     throw new Error('Provide a string argument to checkTextEmpty function')
          |           ^
      120 |   }
      121 |
      122 |   return stringArg.length === 0 || stringArg.trim() === ''

      at checkTextEmpty (src/scripts/utils/utils.js:119:11)
      at forEach (src/scripts/utils/utils.test.js:11:18)
          at Array.forEach (<anonymous>)
      at Object.it (src/scripts/utils/utils.test.js:10:20)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 2 passed, 3 total
Snapshots:   0 total
Time:        3.918 s

如何修复我的测试以使其正常工作?

最佳答案

toThrow期望将一个函数传递给expect,而不是其调用的结果。

所以你必须用匿名函数包装你的函数调用:

expect(() => {
  checkTextEmpty(elem)
}).toThrow(Error);

关于javascript - 测试函数以在 Jest 中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62680040/

相关文章:

javascript - 捆绑后如何处理 Javascript 依赖关系?

javascript - 开 Jest - 在测试前解决 promise

django - 测试中的初始数据

c# - 应该在没有 TestMethod 属性的方法中使用 Assert 吗?

javascript - 测试JQuery的 "on"方法触发回调函数

javascript - CSS over Ajax - 动态加载

javascript - 尝试了解如何将回调合并到 Node.js/SQLITE 中

php - 单元测试自定义 symfony 约束

安卓单元测试 : How to wait for Activity to update UI

angular - Angular 2+中带有参数的单元测试指令