Node.js에서 TypeScript용 단위 테스트 환경 만들기

이상문
4 min readApr 28, 2023

--

개발자로서 의도한 대로 작동하는지 확인하기 위해 코드를 철저하게 테스트하는 것이 중요하다. 단위 테스트는 코드의 개별 구성 요소를 격리하여 테스트할 수 있으므로 이 프로세스의 필수 부분이다. 이 글에서는 Node.js에서 TypeScript용 단위 테스트 환경을 만드는 과정을 소개하고자 한다.

환경 설정

Node.js에서 TypeScript용 단위 테스트 환경을 만드는 첫 번째 단계는 필요한 도구와 종속 항목을 설정하는 것이다. Node.js 및 TypeScript는 물론 Jest와 같은 테스트 프레임워크를 설치해야 한다. 이러한 도구가 설치되면 새 TypeScript 프로젝트를 만들고 테스트 프레임워크를 설정할 수 있다.

우선, 적당한 디렉토리를 만들고, 프로젝트를 셋업한다.

npm init -y

Node.js에서 TypeScript를 사용하는 데 필요한 종속성을 설치한다.

npm install --save-dev typescript @type/node

다음 명령으로 프로젝트의 TypeScript를 구성하는 데 사용되는 tsconfig.json 파일을 생성한다. 이 파일을 필요에 맞게 수정할 수 있다.

npx tsc --init

Jest와 해당 TypeScript 종속 항목을 설치하여 시작한다.

npm install --save-dev jest @types/jest ts-jest

프로젝트의 최상위에 다음 내용으로 jest.config.js 파일을 만든다.

module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
roots: ['<rootDir>/src'],
testMatch: ['**/*.test.ts'],
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
};

테스트 환경을 Node.js로 설정하고, .test.ts 확장자를 가진 src 디렉토리에서 테스트 파일을 찾도록 알려준다.

테스트 작성

환경이 설정되었으면 이제 테스트 작성을 시작할 차례이다. 효과적인 단위 테스트를 작성하려면 테스트 케이스 작성, 어설션 사용, 테스트를 모음으로 구성하는 것과 같은 테스트의 기본 사항을 이해해야 한다.

src 디렉터리에 다음 내용으로 myModule.ts라는 새 파일을 만든다.

// myModule.ts
export default function myModule(arg1: number, arg2: number): number {
// Some complex logic that returns a result
return arg1 + arg2;
}

약간의 의도가 있는 코드이다. 간단한 더하기 연산만 하는 함수이지만, 아주 복잡한 동작을 하는 기능이라고 가정한다. 실은 다음에 작성할 테스트 코드에 이 함수를 mocking해서 작성할 예정이다.

// myModule.test.ts
import myModule from './myModule';

jest.mock('./myModule', () => {
return jest.fn().mockImplementation((arg1: number, arg2: number) => arg1 * arg2);
});

describe('myModule', () => {
it('returns the correct result', () => {
expect(myModule(2, 3)).toEqual(6);
});
});

mocking한 함수도 간단히 곱셈 연산으로 대체했다. 원래 기능의 특정 입력에 대한 출력값으로 구성해야겠지만, 여기에서는 별의미가 없다. 그냥 테스트를 통과하게만 작성해보자.

테스트를 실행하려면 다음 명령을 실행한다.

npx jest

혹은 package.json 에서 “test”에 대한 script를 작성해두면 npm test 로도 테스트해볼 수 있다.

{
...
"scripts": {
"test": "jest",
...
},
...
}

마무리

Jest를 사용하여 Node.js에서 TypeScript를 위한 강력한 단위 테스트 환경을 만들 수 있다. 단위 테스트는 버그를 조기에 발견하고 코드가 의도한 대로 작동하는지 확인할 수 있기 때문에 소프트웨어 개발에서 필수적인 부분이다. 단위 테스트 작성에 시간을 투자하면 장기적으로 시간과 노력을 절약하고 고품질의 안정적인 코드를 생성할 수 있다.

--

--

이상문
이상문

Written by 이상문

software developer working mainly in field of streaming, using C++, javascript

No responses yet