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

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

 

로컬에서 실행할때 항상 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

 

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

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);
});

 

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

yarn test:watch

 

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

memostack

@bluemiv_mm

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