测试函数以开玩笑地抛出错误

时间:2020-07-01 15:18:55

标签: 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

如何修复测试以使其正常运行?

1 个答案:

答案 0 :(得分:1)

toThrow希望将 函数 传递给expect,而不是调用的结果。

因此,您必须使用匿名函数包装函数调用:

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