Jest에서 와일드카드 객체 키 매칭하기
문제 정의: 와일드카드를 사용하여 객체 키 매칭하기
코드 테스트를 작성할 때, Jest 라이브러리를 많이 사용합니다. Jest는 테스트 코드를 쉽고 빠르게 작성할 수 있도록 도와주는 자바스크립트 라이브러리입니다. 하지만 때로는 객체의 키가 동적으로 변경되는 경우, 정확한 키 이름을 모르는 상황에서도 테스트를 진행해야 할 때가 있습니다. 이런 상황에서 와일드카드를 사용해서 객체의 키를 매칭하는 방법에 대해 설명하겠습니다.
와일드카드: 여러 문자나 단어를 대체할 수 있는 특수 문자입니다. 보통 ‘*’ 기호를 사용합니다.
해결 방법: toMatchObject
와 Custom Matcher 사용하기
Jest에서 제공하는 toMatchObject
메서드는 특정 부분만 확인할 수 있도록 도와줍니다. 하지만 이 메서드로는 와일드카드를 직접 사용할 수 없습니다. 따라서 Custom Matcher를 만들어야 합니다.
Custom Matcher란?
Custom Matcher는 Jest에서 기본적으로 제공하지 않는, 사용자가 직접 정의한 매칭 로직입니다.
코드 예시
아래는 Custom Matcher를 작성하는 예시입니다. expect.extend
메서드를 사용해 Custom Matcher를 정의하고 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
expect.extend({
toMatchWildcardObject(received, argument) {
const pass = Object.keys(argument).every((key) => {
if (key.includes('*')) {
return Object.keys(received).some((receivedKey) => receivedKey.startsWith(key.replace('*', '')));
}
return received[key] === argument[key];
});
if (pass) {
return {
message: () => `expected ${received} not to match ${argument}`,
pass: true,
};
} else {
return {
message: () => `expected ${received} to match ${argument}`,
pass: false,
};
}
},
});
이 Custom Matcher를 사용하면, 아래와 같이 테스트를 작성할 수 있습니다.
1
2
3
test('matches even with wildcard in object key', () => {
expect({ 'prefix-123': 'value' }).toMatchWildcardObject({ 'prefix-*': 'value' });
});
결론: 와일드카드와 Custom Matcher로 테스트 유연성 높이기
Jest에서 객체의 동적인 키를 테스트하기 위해서는 Custom Matcher를 사용해야 합니다. 이를 통해 테스트의 유연성을 높일 수 있고, 동적으로 변경되는 객체 키에도 대응할 수 있습니다. Custom Matcher는 Jest의 확장성을 높여주는 좋은 방법 중 하나입니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.