TIL | WIL

9/14 (목) Jest에서 모킹(Mocking)하는 3가지 방법 **_+ VS Code에 컬러풀 주석 세팅하기_** TIL

깊은바다거북 2023. 9. 14. 21:05

공부한 것

  • [VS Code] VS Code에 Colorful Comments라는 확장 프로그램을 추가했다.

    이제 주석에 ? 내지는 ! 등의 특수문자를 덧붙여서 에디터에서 보는 색깔을 달리 지정할 수 있게 되었다. 더 유명한 플러그인인 Better Comments보다 덧붙일 수 있는 특수문자가 더 많아 더 다양한 색깔을 손쉽게 입힐 수 있다는 점이 장점이다.

    사용 예:

  • [Jest] Jest에 대한 소개를 읽었다.
    • 페이스북(메타)에서 만든 자바스크립트용 테스팅 라이브러리라는 점,
    • 이전에는 테스트에 필요한 3개 기능(Test Runner와 Test Matcher, Test Mock)을 분산된 라이브러리에서 가져와 사용해야 했는데, Jest 하나로 이 세 기능을 모두 사용할 수 있어 편리하다는 점

    이 흥미로웠다.

    • (이전에 쓰이던) 테스팅 라이브러리 종류:
      • Test Runner로 사용 가능한 라이브러리: Macha, Jasmin
      • Test Matcher 라이브러리: Chai, Expect
      • Test Mock 라이브러리: Sinon, Testdouble

    참고: https://inpa.tistory.com/entry/JEST-📚-jest-문법-정리

  • [Jest] Jest에서 모킹(Mocking)하는 방법을 깔끔하게 정리하였다. 속이 후련하다.
    1. jest.fn() : 함수 하나를 모킹 처리해줄 때 사용.
    1. jest.mock() : 그룹을 한꺼번에(=모듈 자체를) 모킹 처리해줄 때 사용. 인수로 넣는 모듈(이름)에서 export된 각 객체의 내부 요소들이 전부 모킹화된다.
    1. jest.spyOn() : 어떤 객체에 속한 함수의 구현을 가짜로 대체하지 않고, 해당 함수의 호출 여부와 어떻게(무슨 인수를 받아서) 호출되었는지만을 알아내고 싶을 때 사용.
    • jest.fn() 예시:
      const user = {
      	isAuthenticated: jest.fn(() => true),
      	isOne: jest.fn(),
      	isTwo: jest.fn(),
      	...
      	isOneHundred: jest.fn()
      }

      (어떤 객체의) 메소드를 일일이 모킹한다.

    • jest.mock() 예시:
      jest.mock('../models/user'); // 1)
      const User = require('../models/user'); // 2)
      User.findOrCreate().mockReturnValue('success'); // 3)
      1. ../models/user.js에서 export한 객체의 모든 내부요소들을 그룹 모킹화한다. 예를 들어 export User 였다면 User 내의 모든 요소(속성)들을 전부 모킹한다.
      1. 이제부터 ../models/user.js에서 꺼내 쓰는 요소들은 모두 모킹화 된 것들이다.
      1. jest.fn() 처리 없이 자동으로 모킹되어있어 바로 사용하면 된다.

      이렇게 세 단계를 거쳐 한꺼번에 모킹하고 import하여 단일 메소드를 가져와 사용하면 되게 된다.

    • jest.spyOn() 예시:
      const spyFn = jest.spyOn(Object, 'entries'); // 1)
      const entries = Object.entries(); // 2)
      expect(spyFn).toBeCalledTimes(1); // true
      expect(spyFn).toBeCalledWith(); // ...
      expect(spyFn).toReturn(); // true (성공적으로 한 번은 불림)
      1. Object.entries() 메소드에 스파이를 붙인다. 이제 Object.entries()를 사용할 때마다 몇 번, 어떻게 불렸는지가 기록된다.
      1. Object.entries() 호출 후 matcher 함수들로 테스트한다.

    더 자세한 설명과 예제는 참고한 블로그와 ‘leet208-트라이 자료구조 만들기.test.ts’ 파일을 보자.

    참고: https://inpa.tistory.com/entry/JEST-📚-모킹-mocking-jestfn-jestspyOn?category=914656#mocking_메소드_-_jest.mock


Uploaded by N2T