깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • Til
  • 최소 힙(Min Heap)
  • 트러블 슈팅 Troubleshooting
  • 코딩테스트 연습문제
  • tree
  • 프로그래머스
  • 점화식(Recurrence Relation)
  • Preorder Traversal(전위 순회)
  • 팀 프로젝트
  • 자잘한 에러 해결
  • Inorder Traversal(중위 순회)
  • Backtracking(백트래킹)
  • DFS(깊이우선탐색)
  • BST(이진 탐색 트리)
  • 자료 구조
  • 최대 힙(Max Heap)
  • Binary Tree(이진 트리)
  • 시간 복잡도
  • TIT (Today I Troubleshot)
  • BFS(너비우선탐색)
  • Trie
  • 자바스크립트 기초 문법
  • leetcode-cli
  • TypeScript
  • 재귀 함수
  • POST / GET 요청
  • 01. 미니 프로젝트
  • 혼자 공부하는 자바스크립트
  • Leetcode
  • Linked List
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

TIL | WIL

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

2023. 9. 14. 21:05

공부한 것

  • LeetCode #208. Implement Trie (Prefix Tree)
    LeetCode - The World's Leading Online Programming Learning Platform
    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
    https://leetcode.com/problems/implement-trie-prefix-tree/description/

    => Trie(트라이) 자료구조를 구현하는 문제다. Trie가 어떤 것인지 모르고 일단 구현하라는 대로는 해서 테스트에 통과하긴 했는데 다른 해답들을 보니까 자료구조 자체가 다르다. 문제 의도에 맞게 구현하려면 trie에 대해 조금 더 공부해봐야겠다.

  • [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

  • [Jest] Jest 라이브러리에 대한 좋은 Cheat Sheet을 발견했다.
    The Ultimate Unit Testing Cheat-sheet For Mocha, Chai, Sinon, and Jest
    The Ultimate Unit Testing Cheat-sheet For Mocha, Chai, Sinon, and Jest · GitHub
    https://gist.github.com/yoavniran/1e3b0162e1545055429e?permalink_comment_id=3885853#jest

    예를 들어 (expect 메소드와 함께 쓰이는) matcher 메소드 중 함수의 return 관련한 메소드와 그 별명을 묶어보면 다음과 같다:

    toHaveReturned() = toReturned()
    toHaveReturnedTimes(number) = toReturnTimes(number)
    toHaveReturnedWith(value) = toReturnWith(value)
    toHaveNthReturnedWith(number, value) = NthReturnedWith(number, value)
    toHaveLastReturnedWith(value) = lastReturnedWith(value)

    => 각각 에러를 던진 호출은 셈하지 않거나 테스트를 fail시킨다.


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 9/18 (월) 와일드카드(.)를 포함한 단어를 검색할 수 있는 Trie 클래스 TIL
    • 9/15 (금) Trie 클래스를 구현해보다 TIL
    • 9/13 (수) BFS를 이용한 한 문제 풀이와 바뀐 LeetCode 레이아웃 TIL
    • 9/12 (화) 재귀를 스스로 풀다 TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바