반응형
형식 스크립트에서 개인 메서드를 농담으로 테스트
아래 코드에서 나의 테스트 케이스는 예상대로 통과되었지만 돌연변이 테스트를 위해 stryker를 사용하고 있으며, handleError 함수는 돌연변이 테스트에서 살아남아 handleError 함수가 호출되는지 여부를 테스트하여 돌연변이를 죽이고 싶습니다.개인 기능을 테스트하는 데 도움이 필요합니다.
스파이온을 시도했지만 작동하지 않았습니다.
const orderBuilderSpy = jest.spyOn(orderBuilder, 'build')
const handleError = jest.fn()
expect(rderBuilderSpy).toHaveBeenCalledWith(handleError)
// code written in nestJS/typescript
export class OrderBuilder {
private amount: number
public withAmount(amount: number): BuyOrderBuilder {
this.amount = amount
return this
}
public build(): TransactionRequest {
this.handleError()
return {
amount: this.amount,
acceptedWarningRules: [
{
ruleNumber: 4464
}
]
}
}
private handleError() {
const errors: string[] = []
const dynamicFields: string[] = [
'amount',
]
dynamicFields.forEach((field: string) => {
if (!this[field]) {
errors.push(field)
}
})
if (errors.length > 0) {
const errorMessage = errors.join()
throw new Error(`missing ${errorMessage} field in order`)
}
}
}
// test
describe('Order Builder', () => {
it('should test the handleError', () => {
const orderBuilder = new OrderBuilder()
const errorMessage = new Error(
`missing amount field in order`
)
try {
orderBuilder.build()
} catch (error) {
expect(error).toEqual(errorMessage)
}
});
});
당신은 그것을 확인하고 싶어하는 것처럼 보입니다.handleError
다음 시간에 호출됩니다.build
실행합니다.
개인 메서드는 일반 JavaScript 프로토타입 메서드로 컴파일되므로any
type - 스파이 생성이 TypeScript 유형 검사를 통과하도록 합니다.
다음은 매우 단순화된 예입니다.
class OrderBuilder {
public build() {
this.handleError()
}
private handleError() {
throw new Error('missing ... field in order')
}
}
describe('Order Builder', () => {
it('should test the handleError', () => {
const handleErrorSpy = jest.spyOn(OrderBuilder.prototype as any, 'handleError');
const orderBuilder = new OrderBuilder()
expect(() => orderBuilder.build()).toThrow('missing ... field in order'); // Success!
expect(handleErrorSpy).toHaveBeenCalled(); // Success!
});
});
여기 있어요.
const handleErrorSpy = jest.spyOn(OrderBuilder.prototype as unknown as keyof typeof OrderBuilder, 'handleError');
언급URL : https://stackoverflow.com/questions/56044471/testing-private-methods-in-typescript-with-jest
반응형
'programing' 카테고리의 다른 글
셀 값을 기준으로 행을 삭제하는 방법 (0) | 2023.06.10 |
---|---|
스토리보드의 표 머리글 보기 (0) | 2023.06.10 |
dplyr이 여러 열 또는 복합 키에 조인할 수 있습니까? (0) | 2023.06.10 |
Firestore로 "오브젝트 배열"을 업데이트하는 방법은 무엇입니까? (0) | 2023.06.10 |
객체 저장 및 로드 및 피클 사용 (0) | 2023.06.10 |