memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

쉬운 문제는 웹 사이트에서 풀어도 되지만, 복잡한 문제는 여러 경우의 케이스에 대해서 실행해보는 경우가 생긴다. 백준에서는 다른 알고리즘 문제 사이트와 다르게 웹에서 실행해볼수가 없어서 로컬에서 따로 실행시켜봐야하는 불편함이 있다.

 

로컬에서 실행할때 항상 node [파일명].js 명령어로 수행해보면서 문제를 풀었는데, 이방법도 상당히 귀찮아서 jest를 이용하여 편하게 문제를 풀어보려고 한다.

 

1. jest 설정

1.1. 프로젝트 설정

우선 단위테스트를 하기 위해, jest를 설치한다.

<shell />
yarn init -y yarn add --dev jest

 

1.2. jest config 설정

설치 후 jest.config.js 파일을 작성한다. jest는 설정 내용을 package.json에 작성하거나, jest.config.js에 작성할 수 있다.

<javascript />
const config = { verbose: true, testMatch: ['**/src/**/*.js'], testPathIgnorePatterns: ['/node_modules/'], }; module.exports = config;

 

본 글에서는 src 디렉토리 위치에 알고리즘 문제를 푼 소스들을 위치해 놓고 있기 때문에 위와 같이 설정했다.

 

옵션 설명

  • verbose: 런타임 실행시 상세한 디버깅 정보를 보여줌
  • testMatch: 테스트를 실행할 파일 또는 디렉토리의 match 정보 정의
  • testPathIgnorePatterns: 테스트를 수행하면 안되는 파일 또는 디렉토리의 match 정보를 정의 

 

상세한 옵션 설명은 아래 jest configuration 문서 참고
- https://jestjs.io/docs/configuration

 

 

편하게 수행하기 위해 package.json에 script를 추가한다.

<javascript />
{ "name": "baekjoon-alogorithm", "license": "MIT", "scripts": { "test": "yarn jest --config jest.config.js --passWithNoTests --detectOpenHandles --forceExit", "test:watch": "yarn jest --config jest.config.js --passWithNoTests --detectOpenHandles --watchAll" }, "devDependencies": { "jest": "^28.1.3", "prettier": "^2.7.1" } }

 

옵션 설명

  • --config: jest config 파일의 위치를 정의
  • --passWithNoTests: 테스트할 내용이 없는 경우, 스킵
  • --forceExit: 테스트 코드 수행 후 바로 종료
  • --detectOpenHandles: jest에서 이벤트가 실행된 경우, 해당 옵션이 없으면 리소스가 계속 낭비되는 경우가 있음
  • --watchAll: 테스트 파일들을 계속 지켜보다가 변화가 생기면, 다시 테스트를 수행한다

 

2. 테스트 코드 작성

이제 문제를 풀어보고, 본 글에서는 테스트를 위해 백준 1000번 문제를 풀어봤다. 문제를 풀어보고 테스트 코드를 3개 작성해봤다.

<javascript />
const solution = (input) => { const [a, b] = (input + '').split(' ').map((s) => +s); return a + b; }; process.stdin.on('data', (input) => console.log(solution(input))); test('예제1', () => { const input = `1 2`; expect(solution(input)).toEqual(3); }); test('예제2', () => { const input = `5 7`; expect(solution(input)).toEqual(12); });

 

그리고, package.json에 작성했던 script를 수행해보면, 콘솔에 테스트가 결과를 보여준다.

<shell />
yarn test

yarn test

 

만약, 특정 파일에 대해서만 테스트를 해보고 싶은 경우, 아래와 같이 명령어를 수행하면 된다.

<shell />
yarn test [파일명]

 

2.1. jest watch 옵션

yarn test 명령어를 계속 수행하기 귀찮다면, 아래와 같이 test:watch를 수행하면 된다. (파일에 변화가 생길때마다 테스트를 수행하게 됨)

<shell />
yarn test:watch

 

yarn test:watch 수행 후, 아래와 같이 테스트 코드를 추가했더니

<javascript />
// ...중략... test('예제3', () => { const input = `100 7`; expect(solution(input)).toEqual(107); });

 

파일의 변화를 감지하고, 바로 다시 테스트를 수행한다.

yarn test:watch

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!