Node.js 환경에서 jest는 단위 테스트 목적으로 가장 많이 사용되는 테스트 툴 중 하나입니다.
오늘은 jest 사용할 때 만약 일부 파일이나 디렉토리를 제외하는 방법에 대하여 알아보겠습니다.
Jest 실행시 일부 파일 및 디렉토리 제외하기
방법을 알아보기에 앞서서
언제 그리고 왜 일부 파일들을 제외해야 할까요? 무엇보다 테스트가 필요 없는 파일들입니다. 테스트가 필요없는데 불필요하게 테스트를 수행하면 안되겠죠. 불필요한 시간과 자원을 낭비하게 되기 때문이죠. 그리고 자바스크립트 파일이 아니거나 이 외에 외부 패키지 모듈인 /node_modules/ 들도 역시 제외가 필요하겠습니다.
@ 만약 테스트이면서 목적인 달라 구분이 필요할 경우동일하게 jest를 사용하여 테스트 코드를 작성했으나
단위 테스트와 e2e 테스트를 각각 다른 경로에 다른 파일로 구분하여 작성한 경우를 생각해볼 수 있습니다. 이 경우 테스트 목적이 다르므로 단위 테스트와 e2e는 각각 테스트 시기가 서로 다를 수 있고 테스트 방법 역시 서로 다를 수 있겠습니다.
예를들어 단위 테스트의 경우 작은 단위의 코드 단위를 대상으로 하므로 자주 테스트하거나 watch를 통해 지속적으로 체크할 필요도 있습니다. 이와 달리 e2e 테스트의 경우 배포 직전의 빌드 후나 정해진 시점에만 테스트가 필요할 수도 있기 때문입니다.
그럼 계속해서 어떻게 설정하여 사용하는지 알아봅니다.
jest.config.js 설정 파일 방법 알아보기
테스트를 제외하기 위하여 몇 가지 방법들이 있습니다. 가장 간단한 방법은 바로
jest.config.js에 위치한
testPathIgnorePatterns 블록을 수정하는 방법입니다. 여기에 제외할 패턴을 추가하는 방법이 일반적으로 가장 많이 사용되는 방법입니다.
아래는 /node_modules/와 /plugins/를 제외하는 예제코드 입니다.
// jest.config.jsmodule.exports = {
testPathIgnorePatterns: ['/node_modules/', '/plugins/']
};
비슷하게 package.json에서 jest를 설정을 사용한 경우 이 곳에 동일하게 코드를 작성하여 사용할 수 있습니다.
{
"jest": {
"testPathIgnorePatterns": ["/node_modules/", "/plugins/"]
}
}
일반적으로 설정 옵션으로 해결되는 경우 이 방법이 가장 쉽고 편리합니다. 다만 명령어로 구분하여 각각 실행이 필요한 경우도 있을 수 있는데 이 경우에는 아래처럼 커맨드라인cmd에서 사용이 필요할 수 있죠.
CMD, command line을 사용하는 방법
테스트를 수행할 때 해당 명령어에 옵션으로
--testPathIgnorePatterns을 추가하여 사용하는 방법도 가능합니다. 이처럼 테스트 실행 코드가 존재하는 곳에 해당 옵션을 추가하는 방법입니다. 또한 --testPathIgnorePatterns를 한 번이 아닌 복수로 여러 개 선언할 수도 있는데 이경우
여러 개의 폴더와 파일이 모두 제외할 수 있게 됩니다.
$ jest --testPathIgnorePatterns=/node_modules/ --testPathIgnorePatterns=/plugins/
위 실행 코드 역시 복수로 두 개의 패턴이 사용되었습니다. /node_modules/ 그리고 /plugins/둘 다 제외하였죠. 만약 테스트를 수행하는 명령어가 package.json 내부 스크립트에 넣어서도 많이 사용하는데요 이때도 위처럼 미리 옵션을 추가하면 됩니다.
{
"scripts": {
"test": "jest --testPathIgnorePatterns=/node_modules/ --testPathIgnorePatterns=/plugins/"
}
...
}
이제 스크립트를 실행할 경우 해당 파일이나 경로가 제외되고 테스트 결과를 반환하게 될 것입니다. 아래와 같이 테스트를 e2e와 따로 분리해 사용할 수도 있겠습니다.
{
"scripts": {
"test": "jest --testPathIgnorePatterns=/node_modules/ --testPathIgnorePatterns=/tests/e2e/"
"test:e2e": "jest --testPathIgnorePatterns=/node_modules/ --testPathIgnorePatterns=/tests/unit/"
}
...
}
[참고] 반대로 특정 패턴의 파일이나 디렉토리만 실행하려면?위와는 다른 목적으로 특정 파일만 테스트를 수행하길 원할 수 있습니다. 이때는 아래처럼 커맨드라인 명령어(cmd) 사용 사용 방법입니다.
$ jest testOnly
$ jest *testOnly*
위 명령어는 testOnly가 포함된 경우만 테스트를 수행하게 되겠죠. 그리고 그 아래에는 와일드카드(*) 기호를 텍스트 앞 뒤에 추가한 예제입니다. 이처럼 와일드카드를 함께 사용 가능합니다.
여기까지 e2e 테스트 수행시 원치 않는 파일 및 디렉토리 제외 방법을 간략하게 알아보았습니다.