如何在自定义错误 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);
})
(可能会根据你的测试框架调整)
只有在涉及分支(if
、switch/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
}))
})
我正在为自定义错误编写测试 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);
})
(可能会根据你的测试框架调整)
只有在涉及分支(if
、switch/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
}))
})