모킹 (Mocking)
모킹은 유닛 테스트 코드를 작성할 때 테스트하는 코드가 의존하는 일부분을 가짜로 대체하는 기법을 의미한다. 모킹의 대상은 테스트 목적과 거리가 있거나 테스트 코드 구현 혹은 실제 테스트 과정에서 지나치게 리소스를 차지하는 코드이다. 혹은 DB에 접근하는 것과 같이 side effect를 유발시키거나 결과의 일관성을 방해하는 코드들도 모킹을 적용하는 것이 좋다. 모킹 기법을 활용하면 특정 일부분만을 테스트하는 유닛 테스트의 목적에 부합하면서 빠르고 가벼우면서도 매번 동일한 결과를 반환하는 테스트를 수행할 수 있다.
자바스크립트의 테스팅 라이브러리인 Jest는 여러 가지 모킹 기능을 지원한다. 오늘은 그 중에서도 jest.fn( ) 메소드를 다뤄볼 것이다.
jest.fn( )
jest.fn( )은 가짜 함수(mock function)를 생성해주는 메소드이다. 생성된 가짜 함수는 일반적인 함수처럼 사용할 수 있다. jest.fn( )을 통해 형성된 가짜 함수의 기본 반환값은 undefined이다.
만들어준 가짜 함수의 mockReturnValue( ) 메소드를 활용하면 가짜 함수가 반환할 값을 지정해줄 수 있다. 만약 가짜 비동기 함수를 만들어주고 싶다면 mockResolvedValue( )를 통해 반환값을 바로 지정해줄 수 있다. 혹은 mockImplementation 메소드를 통해 직접 가짜 함수의 내부 로직을 작성해줄 수도 있다.
jest 가짜 함수의 장점 중 하나는 호출될 때의 정보를 기억한다는 것이다. 예를 들어서 expect문을 toBeCalledTimes 메소드와 함께 사용하면 호출 횟수를 테스트할 수 있으며 toBeCalledWith와 함께 사용하면 호출될 때의 parameter값을 점검할 수 있다.
리액트 프로젝트에서 jest.fn( )을 사용하는 가장 많은 순간 중 하나는 network request와 관련된 작업이 포함될 때일 것이다. 이럴 때 앞서 배운 jest.fn( )과 반환값 지정 메소드를 활용해준다면 API의 상태와 무관하게 매번 동일한 결과가 보장되면서 네트워크 통신에 의한 리소스가 소비되지 않는 효율적인 테스트를 작성해줄 수 있다.
'프론트엔드 기본개념 복습 > 테스트코드' 카테고리의 다른 글
[Jest] TypeError : animate is not a function (0) | 2022.04.17 |
---|---|
[Jest] 비동기 코드 테스트하기 (Jest testing with Asynchronous codes) (0) | 2022.04.14 |
[Jest] jest.spyOn() +window 객체 메소드 모킹하기 (0) | 2022.04.14 |
[Jest] ReferenceError:`jest.mock()` is not allowed to reference any out-of-scope variables. (0) | 2022.04.13 |