Test하려는 코드
private parseOrderFilter<T extends BaseModel>(key: string, value: any): FindOptionsOrder<T> {
const order: FindOptionsOrder<T> = {};
const split = key.split('__');
if (split.length !== 2) {
throw new BadRequestException(
`order 필터는 '__'로 split 했을 때 길이가 2여야 합니다. - 문제되는 키값 : ${key}`,
);
}
const [_, field] = split;
order[field] = value;
return order;
}
위 코드에서 split.length !== 2 인 경우를 테스트 할 예정.
일반적으론 아래와 같이 작성하면 됨.(expect()의 인자로 함수를 그대로 전달해주면 된다.)
describe('parseOrderFilter 테스트(public, protected 메서드를 테스트하는 경우)', () => {
it('실패 케이스 _ split 길이가 2가 아닌 경우', () => {
const key = 'where__id__less_than';
const value = 30;
expect(service['parseOrderFilter'](key, value)).toThrow(
new BadRequestException(
`order 필터는 '__'로 split 했을 때 길이가 2여야 합니다. - 문제되는 키값 : ${key}`,
),
);
});
});
그러나 우리가 테스트하려는 함수는 private 메서드.
private은 직접 접근할 수 없으므로, private 메서드를 호출하는 함수를 넘겨주면 됨.
describe('parseOrderFilter 테스트(private 메서드를 테스트하는 경우)', () => {
it('실패 케이스 _ split 길이가 2가 아닌 경우', () => {
const key = 'where__id__less_than';
const value = 30;
expect(() => service['parseOrderFilter'](key, value)).toThrow(
new BadRequestException(
`order 필터는 '__'로 split 했을 때 길이가 2여야 합니다. - 문제되는 키값 : ${key}`,
),
);
});
});
요약
1. 테스트하려는 메서드가 public, protected 면 expect() 인자로 메서드를 그대로 넘겨주면 됨.
2. 테스트하려는 메서드가 private이면 exptect() 인자로 private 메서드를 호출하는 wrapper 함수를 넘겨주면 됨.