Javascript 为什么Jest会在不应该的时候抛出错误?

Javascript 为什么Jest会在不应该的时候抛出错误?,javascript,jestjs,Javascript,Jestjs,我有这样一个函数: const test = (match) => { if (match !== 'cat') { throw new TypeError() } } 我的测试是: describe('test', () => { it('must throw error'() => { try { test('cat') catch(err){ expect(err).toStrictEqual(new T

我有这样一个函数:

const test = (match) => {
   if (match !== 'cat') {
     throw new TypeError()
   }
}
我的测试是:

describe('test', () => {
  it('must throw error'() => {
    try {
      test('cat')
    catch(err){
      expect(err).toStrictEqual(new TypeError())
    }
  }
}

但是测试通过了。它应该失败。为什么它通过了?

只有在未达到预期的情况下,测试才会失败。在您的情况下,因为没有抛出错误,所以甚至不会计算期望值。因此,测试通过

要解决此问题,请执行以下操作之一:

  • 确保使用以下方法评估一个期望值:

  • 以期望的方式处理错误,而不是自己捕捉错误:

    describe('test', () => {
      it('must throw error'() => {
        expect(() => test('cat')).toThrow(TypeError)
      }
    }
    
    请注意,正如所示,这只能在构造函数或错误消息上断言


  • toThrow
    断言构造函数或消息,而不是两者。如果
    toThrow(TypeError)
    toThrow(“”)
    是不够的,那么1是最好的。
    describe('test', () => {
      it('must throw error'() => {
        expect(() => test('cat')).toThrow(TypeError)
      }
    }