쉬운 문제는 웹 사이트에서 풀어도 되지만, 복잡한 문제는 여러 경우의 케이스에 대해서 실행해보는 경우가 생긴다. 백준에서는 다른 알고리즘 문제 사이트와 다르게 웹에서 실행해볼수가 없어서 로컬에서 따로 실행시켜봐야하는 불편함이 있다.
로컬에서 실행할때 항상 node [파일명].js
명령어로 수행해보면서 문제를 풀었는데, 이방법도 상당히 귀찮아서 jest를 이용하여 편하게 문제를 풀어보려고 한다.
jest 설정
프로젝트 설정
우선 단위테스트를 하기 위해, jest
를 설치한다.
yarn init -y
yarn add --dev jest
jest config 설정
설치 후 jest.config.js 파일을 작성한다. jest는 설정 내용을 package.json에 작성하거나, jest.config.js에 작성할 수 있다.
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를 추가한다.
{
"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
: 테스트 파일들을 계속 지켜보다가 변화가 생기면, 다시 테스트를 수행한다
테스트 코드 작성
이제 문제를 풀어보고, 본 글에서는 테스트를 위해 백준 1000번 문제를 풀어봤다. 문제를 풀어보고 테스트 코드를 3개 작성해봤다.
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를 수행해보면, 콘솔에 테스트가 결과를 보여준다.
yarn test
만약, 특정 파일에 대해서만 테스트를 해보고 싶은 경우, 아래와 같이 명령어를 수행하면 된다.
yarn test [파일명]
jest watch 옵션
yarn test 명령어를 계속 수행하기 귀찮다면, 아래와 같이 test:watch를 수행하면 된다. (파일에 변화가 생길때마다 테스트를 수행하게 됨)
yarn test:watch
yarn test:watch 수행 후, 아래와 같이 테스트 코드를 추가했더니
// ...중략...
test('예제3', () => {
const input = `100 7`;
expect(solution(input)).toEqual(107);
});
파일의 변화를 감지하고, 바로 다시 테스트를 수행한다.
'Algorithm > Beakjoon' 카테고리의 다른 글
백준 2525번 / 오븐 시계 (nodejs 알고리즘 풀이) (0) | 2022.07.23 |
---|---|
백준 2884번 / 알람 시계 (nodejs 알고리즘 풀이) (0) | 2022.07.22 |
백준 10869번 / 사칙연산 (nodejs 알고리즘 풀이) (0) | 2022.07.20 |
백준 1000번 / A+B (nodejs 알고리즘 풀이) (0) | 2022.07.19 |
백준 15652번 - N과 M (4) (Java 풀이) (0) | 2020.10.26 |