공부한 것
- LeetCode #208. Implement Trie (Prefix Tree)
=> 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
- [Jest] Jest에서 모킹(Mocking)하는 방법을 깔끔하게 정리하였다. 속이 후련하다.
jest.fn()
: 함수 하나를 모킹 처리해줄 때 사용.
jest.mock()
: 그룹을 한꺼번에(=모듈 자체를) 모킹 처리해줄 때 사용. 인수로 넣는 모듈(이름)에서export
된 각 객체의 내부 요소들이 전부 모킹화된다.
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)
../models/user.js
에서export
한 객체의 모든 내부요소들을 그룹 모킹화한다. 예를 들어 export User 였다면 User 내의 모든 요소(속성)들을 전부 모킹한다.
- 이제부터
../models/user.js
에서 꺼내 쓰는 요소들은 모두 모킹화 된 것들이다.
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 (성공적으로 한 번은 불림)
Object.entries()
메소드에 스파이를 붙인다. 이제Object.entries()
를 사용할 때마다 몇 번, 어떻게 불렸는지가 기록된다.
Object.entries()
호출 후 matcher 함수들로 테스트한다.
더 자세한 설명과 예제는 참고한 블로그와 ‘leet208-트라이 자료구조 만들기.test.ts’ 파일을 보자.
- [Jest] Jest 라이브러리에 대한 좋은 Cheat Sheet을 발견했다.
예를 들어 (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