Jest에서 Jest.clearAllMocks()와 Jest.resetAllMocks() 차이점
Introduction
Jest는 페이스북에서 개발한 JavaScript 테스트 프레임워크로, 간편한 사용법과 빠른 실행 속도로 인기가 있다.
Jest를 이용하여 테스트 코드를 작성하던 중, 수 많은 함수나 루트를 mocking하게 되는데 지저분해진 테스트 코드를 리팩토링 하다가 mock함수의 초기화에 대한 고찰을 하게 되었다.
Jest의 모의 함수(mock functions)를 사용할 때 중요한 두 가지 함수인 jest.clearAllMocks()
와 jest.resetAllMocks()
의 차이에 대해 기술한다.
jest.clearAllMocks()
jest.clearAllMocks()
함수는 모든 모의 함수의 호출 정보를 초기화하는 데 사용한다.
이를 통해 테스트 간 독립성을 보장하며, 다양한 테스트 시나리오에서 중요한 역할을 한다.
다음은 해당 메소드를 테스트해볼 수 있는 예시 코드이다.
|
|
위 코드를 풀어쓰자면 다음과 같다.
jest.clearAllMocks()
실행 이후,
- 이전에 mock함수를 2번 호출한 횟수는 초기화 되었다.
- mock함수의 인스턴스 ‘args1’, ‘args2’ 역시 초기화 되었다.
- mock함수의 반환값은, 최종 반환값으로 설정된 ‘New return value’ 그대로 남아있으며 아무런 영향이 없다.
코드의 설명과 마찬가지로,
clearAllMocks
는 mock함수의 호출 횟수, 인스턴스 등을 초기화 한다.
하지만 mock함수의 반환값은 초기화하지 않는다.
주요 사용 시나리오:
- 테스트 전/후 초기화 단계에서 호출 정보를 초기화하고 싶을 때
jest.resetAllMocks()
jest.resetAllMocks() 함수는 모든 모의 함수의 호출 정보뿐만 아니라 구현 및 반환 값 설정도 초기화하는 데 사용된다.
이를 통해 각 테스트가 완전히 독립적으로 실행되도록 보장하며, 다양한 테스트 시나리오에서 유용하게 사용할 수 있다.
|
|
위 코드를 풀어쓰자면 다음과 같다.
jest.resetAllMocks()
실행 이후,
- 이전에 mock함수를 2번 호출한 횟수는 초기화 되었다.
- mock함수의 인스턴스 ‘args1’, ‘args2’ 역시 초기화 되었다.
- mock함수의 반환값은 초기화되어
undefined
가 되었다.
resetAllMocks
는 clearAllMocks
의 모든 기능에 더해서 반환값 역시 초기화 시킨다.
즉, 완벽한 새로운 mock함수로 되돌린다.
주요 사용 시나리오:
- 테스트 전/후 초기화 단계에서 호출 정보와 구현, 반환 값 설정을 모두 초기화하고 싶을 때
- 모의 함수의 구현을 변경하는 테스트 사이에서 각 테스트의 독립성을 보장하고 싶을 때
jest.clearAllMocks()
: 모든 모의 함수의 호출 정보 초기화jest.resetAllMocks()
: 모든 모의 함수의 호출 정보뿐만 아니라 구현 및 반환 값 설정도 초기화
Related Content
- Error Log - Jest.spyOn()에서 재사용함수에 대한 모의 불가
- Webina 참여 회고 - 원티드 주최 'ChatGPT 시대에 구성원의 역량을 어떻게 육성할 것인가?'
- AWS EC2에서 Product 서버와 개발용 서버 같이 사용하기
- AWS RDS 데이터 - 다른 계정으로 이전하기
- Git Commit Message 컨벤션 설정