본문으로 건너뛰기
2022. 5. 19·약 3분

로컬에서 LeetCode 테스트 환경 설정하기

LeetCode 로고가 있는 문제 카드가 점선 화살표를 따라 노트북으로 옮겨 가 테스트 둘은 통과하고 하나는 실패한 그림

LeetCode​

국내에서 프로그래머스와 백준을 많이 사용하듯, 해외에서는 LeetCode로 알고리즘 문제를 풀고 기술 면접을 준비하는 경우가 많습니다.

알고리즘 문제가 실제 업무와 다르다는 의견도 있지만, 제한된 조건에서 문제를 분석하고 코드를 검증하는 연습에는 도움이 됩니다. 저도 시간이 날 때마다 문제를 풀고 있습니다.

기술 면접과 알고리즘 문제 풀이에 관한 참고 글은 다음과 같습니다.


로컬 테스트 환경 준비하기​

JavaScript로 문제를 풀기 위해 Node.js와 Jest로 테스트 환경을 구성합니다. 이 절차는 macOS에서 JavaScript 풀이 환경을 만드는 예입니다.

Node.js 설치​

macOS 용 LTS 와 Current 버전을 내려받을 수 있는 Node.js 공식 사이트

Node.js 공식 사이트에서 운영체제에 맞는 설치 파일을 내려받습니다. https://nodejs.org/en/

글 작성 시점의 LTS 버전은 16이었지만 지금은 지원이 끝났습니다. 설치 시점의 최신 LTS 버전을 사용하고, 여러 버전을 관리해야 한다면 nvm을 이용합니다.

Homebrew를 사용한다면 다음 명령으로 Node.js를 설치합니다.

$ brew install node

설치가 끝나면 Node.js와 npm 버전을 확인합니다. 아래 화면에 보이는 버전 번호는 글을 쓸 당시의 값입니다.

$ node -v
$ npm -v

node -v 로 설치된 버전 v14.18.1 을 확인하는 터미널

Jest 전역 설치​

Jest를 전역에 설치합니다. 권한 오류(EACCES)가 나면 sudo 대신 nvm으로 Node.js를 설치합니다.

$ npm install -g jest

npm install -g jest 로 Jest 를 전역 설치하는 터미널

설치 후 Jest 버전을 확인합니다.

$ jest --version

jest --version 으로 28.1.0 을 확인하는 터미널

프로젝트 디렉터리 만들기​

풀이를 둘 디렉터리에서 npm init -y를 실행합니다.

$ npm init -y

생성된 package.json에 다음 설정을 추가합니다. Jest 27부터는 node가 기본 테스트 환경이라 이 설정은 생략해도 됩니다.

{
// package.json의 다른 필드
"jest": {
"testEnvironment": "node"
}
}

문제별로 index.js와 test.js 만들기​

my-test 폴더 아래 index.js, test.js, package.json 이 놓인 파일 트리

문제 풀이를 작성할 index.js와 이를 검증할 test.js를 만듭니다.

index.js

function isPalindrome(s) {
// 여기서 문제 풀이
}

module.exports = isPalindrome;

test.js

const isPalindrome = require("./index"); // 풀이 함수를 불러옵니다.

test("'A man, a plan, a canal: Panama' returns true", () => {
expect(isPalindrome("A man, a plan, a canal: Panama")).toEqual(true);
});

Jest로 테스트 실행하기​

watch 옵션을 붙여 jest 를 실행하는 터미널

프로젝트 루트의 터미널에서 다음 명령을 실행합니다.

jest DIRECTORY_PATH/test.js --watchAll

--watchAll 옵션을 사용하면 코드를 저장할 때마다 테스트를 다시 실행합니다.

테스트가 실패해 기대값 true 와 실제값 undefined 를 보여 주는 Jest 출력

앞에서 읽으나 뒤에서 읽으나 같은 문자열을 회문(Palindrome)이라고 합니다. 예제로 LeetCode 125번 문제를 풀어보겠습니다.

LeetCode 125번 Valid Palindrome 문제의 설명과 예시 입출력

문제 설명의 입출력 예시와 Testcase 탭의 값을 Jest 테스트로 옮기면 로컬에서도 풀이 결과를 바로 확인할 수 있습니다.

isPalindrome 구현 코드와 테스트가 통과한 터미널 출력

이제 문제마다 같은 구조로 파일을 만들고 테스트를 추가하면 됩니다.

좋은 사람들과 재미있는 일을 하며 열정적이고 즐겁게 살고 싶은 개발자