如何在自定义错误 class 中为 super 编写测试(打字稿)

How to write tests for super in custom error class (Typescript)

我正在为自定义错误编写测试 class 并希望覆盖所有行,但我不确定如何测试超级调用,我还想 return 提供给对象的条形码创造.

export class BarcodeDecoderError extends Error {
  constructor(
    message: string,
    public readonly barcode: string,
    public readonly errorType: ErrorType
  ) {
    super(message);
  }
}

编写测试应该非常简单。覆盖率意味着 “此行是否在 运行 我的测试时执行”。所以调用 BarcodeDecoderError 的构造函数应该可以解决问题。当然你可能还想测试 super 调用是否有预期的效果:

it('instantiates BarcodeDecoderError with all properties', () => {
    const error = new BarcodeDecoderError('message', 'barcode', ErrorType.Something);
    expect(error.message),toBe('message'); // Test if super call worked
    expect(error.barcode).toBe('barcode');
    expect(error.errorType).toBe(ErrorType.Something);
})

(可能会根据你的测试框架调整)


只有在涉及分支ifswitch/case、条件loops)时,全面覆盖通常才会成为问题,或者如果您正在构建一个公开代码中未使用的函数的库。

在您的具体示例中,可能足以在实际示例中测试 BarcodeDecoderError 并将覆盖率作为副产品:

it('throws BarcodeDecoderError with all properties', () => {
    // Decode something where you would expect an error
    const decoder = new BarcodeDecoder();
    expect(decoder.decode()).toThrow(expect.objectContaining({
        message: 'message',
        barcode: 'barcode',
        errorType: ErrorType.Something
    }))
})