Mocha 사용법
목차
- [Node.js, Mocha를 이용한 테스트 주도 개발(TDD)](https://kos5667.github.io/architecture/2024/04/21/Node.js-TDD-with-Mocha.html)
- Mocha 사용법
- Chai 사용법
Mocha란?
Mocha는 JavaScript 커뮤니티에서 널리 사용되는 테스트 프레임워크 중 하나로, 개발자가 신뢰할 수 있는 코드를 작성하도록 돕는 도구입니다.
Node.js와 브라우저 모두에서 사용될 수 있으며, 비동기 테스팅을 포함한 광범위한 테스트 케이스를 지원합니다.
그 유연성과 편의성 덕분에, 단일 단위 테스트에서부터 복잡한 통합 테스트에 이르기까지 다양한 테스트 요구 사항을 충족시킬 수 있습니다.
Mocha는 테스트 주도 개발(TDD)과 행위 주도 개발(BDD) 접근 방식 모두를 지원하며, 이를 통해 테스트 코드 작성을 보다 쉽고 효율적으로 만듭니다.
Mocha의 사용은 코드의 품질을 개선하고, 버그를 빠르게 발견하며, 개발 과정에서의 신뢰성을 높이는 데 기여합니다.
Mocha의 주요 기능
-
비동기 테스팅 지원: Mocha는 비동기 코드 테스팅을 쉽게 만듭니다. 콜백, 프로미스, async/await을 사용한 테스트를 지원하여 현대적인 JavaScript 개발에 적합합니다.
-
테스트 케이스와 슈트: Mocha를 사용하면
describe
와it
같은 함수를 사용하여 테스트 케이스와 테스트 슈트를 구조화할 수 있습니다. 이를 통해 테스트 코드의 가독성과 조직을 개선할 수 있습니다. -
유연한 보고: Mocha는 다양한 테스트 결과 보고 옵션을 제공합니다. HTML, LCOV, JSON 등 다양한 포맷으로 테스트 결과를 출력할 수 있으며, 터미널에서 직접 보기 좋은 리포트를 제공합니다.
-
풍부한 플러그인 생태계: Mocha는 커스텀 리포터, 인터페이스, 커버리지 도구 등을 포함하여 확장 가능한 아키텍처를 가지고 있습니다. 이를 통해 다양한 플러그인과 도구를 Mocha와 함께 사용할 수 있습니다.
-
전역 변수 누출 감지: 테스트를 실행할 때 미선언된 전역 변수가 생성되는 것을 감지하고 경고합니다. 이는 코드의 실수를 빠르게 발견하고 수정하는 데 도움을 줍니다.
-
타임아웃 제어: Mocha는 각 테스트 케이스에 대한 타임아웃을 설정할 수 있으며, 이는 긴 실행 시간을 갖는 비동기 테스트를 관리하는 데 유용합니다.
-
훅(hooks) 사용:
before
,after
,beforeEach
,afterEach
와 같은 훅을 사용하여 테스트 슈트의 실행 전후에 코드를 실행할 수 있습니다. 이를 통해 테스트 환경을 설정하고 정리하는 작업을 쉽게 할 수 있습니다.
Mocha는 테스트를 구성하고 실행하기 위해 여러 주요 메소드를 제공합니다. 이 메소드들은 테스트 케이스를 정의하고, 테스트 생명주기를 관리하는 데 사용됩니다. 아래 표는 Mocha의 주요 메소드들을 요약한 것입니다:
메소드 | 설명 |
---|---|
describe() |
테스트 슈트를 정의합니다. 이 메소드는 테스트의 한 그룹을 나타내며, describe() 블록 내에 다수의 it() 블록을 포함할 수 있습니다. |
it() |
개별 테스트 케이스를 정의합니다. 실제 테스트를 실행하는 코드를 포함합니다. |
before() |
모든 테스트 케이스가 실행되기 전에 한 번만 실행되는 코드 블록을 정의합니다. 테스트 슈트의 초기 설정에 유용합니다. |
after() |
모든 테스트 케이스가 실행된 후에 한 번만 실행되는 코드 블록을 정의합니다. 테스트 슈트의 정리 작업에 유용합니다. |
beforeEach() |
각 테스트 케이스가 실행되기 전에 실행되는 코드 블록을 정의합니다. 각 테스트가 시작하기 전에 반복적으로 필요한 설정을 제공합니다. |
afterEach() |
각 테스트 케이스가 실행된 후에 실행되는 코드 블록을 정의합니다. 각 테스트 이후에 반복적으로 필요한 정리 작업을 제공합니다. |
context() |
describe() 와 기능적으로 동일하며, 테스트 케이스의 논리적 그룹핑을 위해 사용됩니다. BDD 스타일의 테스트 구조에서 의미적 구분을 명확히 하기 위해 사용할 수 있습니다. |
specify() |
it() 과 기능적으로 동일합니다. BDD 스타일의 테스트에서 it() 의 대안으로 사용될 수 있습니다. |
xdescribe() , xit() , xcontext() , xspecify() |
이들 메소드는 각각 describe() , it() , context() , specify() 의 실행을 건너뛰게 합니다. 테스트를 일시적으로 비활성화할 때 유용합니다. |
이 메소드들을 사용하여 테스트 코드를 구조화하고, 테스트 실행 전후에 필요한 설정과 정리 작업을 정의할 수 있습니다. Mocha의 이러한 메소드들은 테스트 코드의 가독성과 유지보수성을 향상시키는 데 도움을 줍니다.
Mocha 옵션
Mocha는 테스트 실행을 사용자 정의하기 위한 다양한 옵션을 제공합니다. 이 옵션들은 Mocha의 동작 방식을 조정하고, 테스트 결과의 보고 방식을 변경하며, 테스트 실행 환경을 구성하는 데 사용됩니다. 명령줄(CLI)이나 Mocha의 구성 파일을 통해 이러한 옵션들을 설정할 수 있습니다.
옵션 | 설명 |
---|---|
--allow-uncaught |
테스트 실행 중 발생하는 예외를 잡지 않고, 이를 허용합니다. |
--async-only , -A |
비동기 테스트만을 실행하도록 Mocha에 지시합니다. 모든 테스트가 비동기적으로 선언되어야 합니다. |
--bail , -b |
첫 번째 테스트 실패 시 테스트 실행을 중단합니다. |
--check-leaks |
전역 변수 누출을 검사합니다. |
--delay |
테스트 파일의 로드가 완료된 후에 테스트를 시작하도록 지연시킵니다. 테스트 케이스를 동적으로 로드할 때 유용합니다. |
--exit |
테스트가 완료된 후 Mocha 프로세스를 강제로 종료합니다. 이 옵션은 비동기 작업이 완료되지 않았을 때 유용합니다. |
--file |
테스트 전에 특정 파일을 로드합니다. 여러 파일을 지정할 수 있으며, 이는 테스트에 공통적으로 필요한 설정을 포함할 때 유용합니다. |
--global , -g |
누출 검사를 위해 허용할 전역 변수를 지정합니다. |
--grep , -g |
테스트 케이스 이름 또는 패턴에 매칭되는 테스트만 실행합니다. |
--fgrep , -f |
지정한 문자열을 포함하는 테스트만 진행 |
--invert , -i |
--grep , --fgrep 결과와 일치하지 않는 테스트만 진행 |
--recursive |
디렉토리 내의 모든 하위 디렉토리에서 테스트 파일을 찾아 실행합니다. |
--reporter , -R |
결과 보고에 사용할 리포터를 지정합니다. 예: spec , dot , nyan 등 |
--reporter-options , -O |
리포터에 전달할 옵션을 지정합니다. 예: mocha --reporter-options output=report.html |
--retries |
실패한 테스트 케이스를 재시도하는 횟수를 지정합니다. |
--slow , -s |
“느린” 테스트 케이스 임계값을 밀리초 단위로 설정합니다. 이보다 시간이 많이 걸리는 테스트는 느린 것으로 간주됩니다. |
--timeout , -t |
테스트 케이스의 타임아웃을 밀리초 단위로 설정합니다. 기본값은 2000ms입니다. |
--ui , -U |
사용할 테스트 UI를 지정합니다. 예: bdd , tdd , qunit 등 |
--watch , -w |
파일 변경 시 테스트를 자동으로 재실행합니다. |
--colors , -c |
코드 색상 활성화 |
--no-colors , -C |
코드 색상 비활성화 |