티스토리 뷰

반응형

자바스크립트 테스팅 프레임워크로 Jest를 사용할 떄 자엄 중에 하나는 다른 라이브러리 설치 없이 바로 mock기능을 지원한다는 점이다.

📌mocking 이란?

mock은 단위 테스트를 작성할 때, 해당 코드가 의존하는 부분을 가짜(mock)으로 대체하는 기법을 말한다. 일반적으로 테스트하려는 코드가 의존하는 부분을 직접 생성하기가 너무 부담스러운 경우 mocking이 많이 사용된다. 

예를들어, DB에서 데이터를 삭제하는 코드에 대한 단위테스트를 작성할 때, 실제 데이터베이스를 사용한다면 여러가지 문제점이 발생할 수 있다.

  • 데이테베이스 접속과 같이 Network이나 I/O 작업이 포함된 테스트는 실행 속도가 현저히 떨어질 수 밖에 없다.
  • 프로젝트의 규모가 켜져서 한 번에 실행해야 할 테스트 케이스가 많이지면 이러한 작은 속도 저하들이 모여 큰 이슈가 될 수 있으며, CI/CD 파이프라인의 일부로 테스트가 자동화되어 자주 실행되야 한다면 더 큰 문제가 될 수 있다.
  • 테스트 자체를 위한 코드보다 데이터베이스와 연결을 맺고 트랜잭션을 생성하고 쿼리를 전송하는 코드가 더 길어질 수 있다. 
  • 만약 테스트 실행 순간 일시적으로 데이터베이스가 오프라인 작업 중이었다면 해당 테스트는 실패하게 됩니다. 따라서 테스트가 인프라 환경에 영향을 받게된다. (non-deterministic)
  • 테스트가 종료 직 후, 데이터베이스에서 변경 데이터를 직접 원복하거나 트렌잭션을 rollback 해줘야 하는데 상당히 번거로운 작업이 될 수 있다.

무엇보다 이런 방식으로 테스트를 작성하게 되면 특정 기능만 분리해서 테스트하겠다는 단위테스트(Unit test)의 근본적인 목적에 맞지않게 된다.

mocking은 이러한 상황에서 실제 객체인 척하는 가짜 객체를 생성하는 매커니즘을 제공한다. 또한 테스트가 실행되는 동안 가짜 객체에 어떤 일들이 발생했는지를 기억하기 때문에 가짜 객체가 내부적으로 어떻게 사용되는지 검증할 수 있다. 결론적으로,mocking을 이용하면 실제 객체를 사용하는 것보다 훨씬 가볍고 빠르게 실행되면서도, 항상 동일한 결과를 내는 테스트를 작성할 수 있다. 

📌jest.fn() 사용법

Jest는 가짜함수(mock function)를 생성할 때 jest.fn() 함수를 사용한다.

const mockFn = jest.fn();

그리고 이 가짜 함수는 일반 js함수와 동일한 방식으로 인자를 넘겨 호출할 수 있다. 

mockFn();
mockFn(1);
mockFn("a");
mockFn([1,2], {a: "b"});

위의 가짜 함수의 호출 결과는 모두 undefined이다. 어떤 값을 리턴해야할지 아직 알려주지 않았기 때문이다.

mockFn.mockReturnValue("I am a mock");
console.log(mockFn());// I am a mock!

mockReturnValue(리턴 값) 함수를 이용해서 가짜 함수가 어떤 값을 리턴해야할지 설정해줄 수 있다.
비슷한 방식으로  mockReturnValue(Promise가 resolve하는 값)함수를 이용하면 가짜 비동기 함수를 만들 수 있다.

mockFn.mockResolvedValue("I will be a mock!");
mockFn().then((result) => {
  console.log(result); // I will be a mock!
});

 

 

참고 링크 : https://www.daleseo.com/jest-fn-spy-on/
반응형

'기타' 카테고리의 다른 글

Node.js의 Timers  (0) 2022.09.28
JWT의 개념, 프론트엔드에서 해야 할 일  (0) 2022.08.22
Jest 유닛테스트(2) - Jest Mocking Modules  (0) 2022.02.12
Swagger란?  (0) 2022.02.05
TDD 방법론으로 개발하기  (2) 2022.01.07
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함