함수가 함수 외부에 있는 module, function들을 사용해서 어떤 기능을 제공할 때, 그 함수는 외부 요소에 의존하게 된다. 단위 테스트에서, 테스트하고자 하는 함수(코드)가 의존하는 funciton, class에 대해 모조품을 만들고 일단 그 기능이 돌아가게 하는 것을 mocking이라고 한다.
한마디로, 어떤 코드를 테스트 할 때 그 코드가 의존하는 부분을 가짜(mocking)로 대체하는 방법을 말한다.
테스트 하려는 함수의 기능이 다른 요소, 기능들과 엮여있을 경우 오직 그 함수의 기능을 테스트하기 힘들기 때문이다.
예를 들어 회원가입 처리를 잘 하는지 테스트하기 위해서 request body에 id, password를 전달하면 정보를 추출해서 데이터베이스에 넘기는 역할을 하는 controller의 기능을 테스트 하는 상황을 가정해보자.
이 때, 실제 데이터베이스를 사용해서 테스트 하는 것은
이러한 문제들이 있기 오직 controller의 기능만 테스트하기에는 한계가 있다.
모킹 함수를 사용하면 기존의 데이터베이스에 추출한 id, password를 전달하는 controller 메서드가 반환해야 할 값을 우리가 임의로 지정할 수 있다. 테스트 하려고 하는 것은 controller 메서드의 기능이므로 “외부 요소들을 전혀 고려 하지 않았을 때, controller 메서드는 ~~값을 반환하도록 하자”라고 가정하는 것이다.
즉, 테스트를 위한 mocking(모조품) 함수를 만드는 것이다.
jest는 모킹 함수를 생성할 수 있는 함수 jest.fn()을 제공한다. 이를 통해서, 일회성 테스트 용도로 사용되는 함수의 내부 로직을 구현할 수 있다.
이 메서드는 모킹한 함수가 반환해야할 값을 임의로 지정할 수 있다.