Jest의 jest.fn(), jest.spyOn()를 이용한 함수 모킹

올인원(All-in-one) 테스팅 프레임워크 Jest를 사용하면 다른 라이브러리 설치 없이 바로 소위 mocking 기능을 쓸 수 있는데요. 여기서 mocking을 한국어로 뭐라고 번역해야 모르겠네요. 😅주변에서 보면 “모킹”으로 그냥 영어를 차용해서 쓰고 있는 것 같습니다. mocking은 단위 테스트를 작성할 때, 해당 코드가 의존하는 부분을 가짜(mock)로 대체하는 기법을 말하는데요. 일반적으로 테스트하려는 코드가 의존하는 부분을 직접 생성하기가 너무 부담스러운 경우 mocking이 많이 사용됩니다. 예를 들어, 데이터베이스에서 데이터를 삭제하는 코드에 대한 단위 테스트를 작성할 때, 실제 데이터베이스를 사용한다면 여러 가지 문제점이 발생할 수 있습니다. - 데이테베이스 접속과 같이 Network이나 I/O 작업이 포함된 테스트는 실행 속도가 현저히 떨어질 수 밖에 없습니다. - 프로젝트의 규모가 켜져서 한 번에 실행해야 할 테스트 케이스가 많이지면 이러한 작은 속도 저하들이 모여 큰 이슈가 될 수 있으며, CI/CD 파이프라인의 일부로 테스트가 자동화되어 자주 실행되야 한다면 더 큰 문제가 될 수 있습니다. - 테스트 자체를 위한 코드보다 데이터베이스와 연결을 맺고 트랜잭션을 생성하고 쿼리를 전송하는 코드가 더 길어질 수 있습니다. 즉, 배보다 배꼽이 더 커질 수 있습니다. - 만약 테스트 실행 순간 일시적으로 데이터베이스가 오프라인 작업 중이었다면 해당 테스트는 실패하게 됩니다. 따라서 테스트가 인프라 환경에 영향을 받게됩니다. (non-deterministic) - 테스트가 종료 직 후, 데이터베이스에서 변경 데이터를 직접 원복하거나 트렌잭션을 rollback 해줘야 하는데 상당히 번거로운 작업이 될 수 있습니다. 무엇보다 이런 방식으로 테스트를 작성하게 되면 특정 기능만 분리해서 테스트하겠다는 단위 테스트(Unit Test)의 본연의 의도에 맞지 않게 됩니다. mocking은 이러한 상황에서 실제 객체인 척하는 가짜 객체를 생성하는 매커니즘을 제공합니다. 또한, 테스트가 실행되는 동안 가짜 객체에 어떤 일들이 발생했는지를 기억하기 때문에 가짜 객체가 내부적으로 어떻게 사용되는지 검증할 수 있죠. 결론적으로, mocking을 이용하면 실제 객체를 사용하는 것보다 훨씬 가볍고 빠르게 실행되면서도, 항상 동일한 결과를 내는 테스트를 작성할 수 있습니다. 이번 글에서는 Jest가 제공하는 `jest.fn()`과 `jest.spyOn()` 함수의 사용법과 이를 활용하여 어떻게 실제 테스트에서 mocking을 할 수 있는지 알아보겠습니다. 📝 포스팅: https://www.daleseo.com/jest-fn-spy-on/ 아래 Jest와 연관된 게시물도 같이 참고해보시면 도움이 될 것 같습니다. 📕 Jest 테스팅 프레임워크 기초: https://careerly.co.kr/comments/88205 📗 Jest로 비동기 코드에 대한 테스트 작성하기 https://careerly.co.kr/comments/88614 📘 Jest로 테스트 전/후 처리하기: https://careerly.co.kr/comments/88874

[Jest] jest.fn(), jest.spyOn() 함수 모킹

www.daleseo.com

[Jest] jest.fn(), jest.spyOn() 함수 모킹

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 8월 23일 오후 9:01

 • 

저장 18조회 2,414

댓글 0

    함께 읽은 게시물

    < 뛰어난 리더는 '시간'을 가장 까다롭게 쓴다 >

    1. 관리자 업무 중 상당한 부분을 차지하는 일은 인력, 돈, 자본 등의 자원을 할당하는 것이다.

    ... 더 보기

    이력서에 쓰는 경험

    

    ... 더 보기

    < 리차드 파인만의 아버지가 아들에게 전한 인생 조언 >

    1. 아버지는 파인먼에게 이렇게 강조해서 말해 주었습니다.

    ... 더 보기

    직장인으로서 10년 정도 일하게 되면 피할 수 없는 순간이 바로 조직에서 리더의 역할을 받게 되는 인사발령이다. 팀원이었을 때는 내게 주어진 업무를 내가 가진 능력과 주변 동료들의 도움으로 해결하고, 그에 합당한 평가와 보상을 기다리며, 나쁘지 않는 리워드와 내 위치에 안도하며 또 새해를 맞이하고 하루하루를 버텨나가는 과정에 큰 어려움이 없다.

    ... 더 보기

     • 

    저장 3 • 조회 583


    < 스포티파이와 멜론, 같은 음악인데 왜 경험은 다를까? >

    1. 엔터테인먼트 프로덕트의 본질은 콘텐츠다. 사용자는 콘텐츠를 소비하며 감정을 느낀다. 재미, 감동, 공포, 희열. 인간의 다양한 감정이 콘텐츠를 통해 꺼내진다.

    ... 더 보기

    👋 LLM 활용에 도움이 되는 가이드 모음

    ✅️Prompting Guide 101 by Google : https://lnkd.in/d8UwPWeN

    ... 더 보기

     • 

    저장 10 • 조회 803