Mocha를 통한 코드 커버리지


288

NodeJS 애플리케이션을 테스트하기 위해 Mocha를 사용하고 있습니다. 코드 범위 기능을 사용하는 방법을 알 수 없습니다. 인터넷 검색을 시도했지만 적절한 자습서를 찾지 못했습니다. 도와주세요.

답변:


410

코드 커버리지를위한 추가 라이브러리가 필요하며, 얼마나 강력하고 쉬운 이스탄불 인지 알 수 있습니다. 모카 테스트를 통과 한 후 다음을 시도하십시오.

npm install nyc

이제 nyc 명령을 기존 테스트 명령 앞에 두십시오.

{
  "scripts": {
    "test": "nyc mocha"
  }
}

30
로컬로 설치된 mocha 버전을 실행중인 경우을 시도하십시오 istanbul cover node_modules/mocha/bin/_mocha.
Eric McCarthy

102
또는 istanbul과 mocha를 로컬로 설치하고 package.json의 scripts 섹션에 다음을 추가 한 다음 npm run coverage : "coverage": "./node_modules/istanbul/lib/cli.js cover ./node_modules/ mocha / bin / _mocha---ui bdd -R spec -t 5000
Dan Kohn

6
Windows 에서이 명령을 실행하는 데 문제가 있었지만 mocha bin의 전체 경로를 지정하여 작동시킬 수있었습니다. istanbul.cmd cover C:\Users\{UserName}\AppData\Roaming\npm\node_modules\mocha\bin\_mocha
Jason Jarrett

4
$(npm bin)은 정식 바로 가기 ./node_modules/.bin/이며 bin 폴더의 istanbul/lib/cli.js별칭 istanbul입니다. 짧은 명령은 다음과 같습니다.$(npm bin)/istanbul cover $(npm bin)/_mocha -- --ui bdd -R spec -t 5000
Henry Blyth

19
@ Windows 사용자 :istanbul cover node_modules/mocha/bin/_mocha -- -R spec
Pier-Luc Gendreau

150

이제 ( 2020 ) 이스탄불 을 사용하는 기본 방법"최신 명령 줄 인터페이스" nyc를 사용하는 것 입니다.

설정

먼저 프로젝트에 설치하십시오.

npm i nyc --save-dev

그런 다음 npm 기반 프로젝트가있는 경우 package.json 파일 의 scripts객체 내부에서 테스트 스크립트를 변경 하여 mocha의 코드 적용 범위를 실행하십시오. 테스트 .

{
  "scripts": {
    "test": "nyc --reporter=text mocha"
  }
}

운영

이제 테스트를 실행하십시오

npm test

테스트 출력 직후 콘솔에 다음과 같은 표가 표시됩니다.

이스탄불 뉴욕 모카 코드 커버리지

커스터마이징

HTML 보고서

그냥 사용

nyc --reporter=html

대신에 text. 이제 내부에 보고서를 작성합니다 ./coverage/index.html.

보고서 형식

이스탄불은 광범위한 보고서 형식을 지원합니다. 그냥 그 살펴 보고 라이브러리 당신을 위해 가장 유용 할 수 있습니다. --reporter=REPORTER_NAME원하는 각 형식 에 대한 옵션을 추가하십시오 . 예를 들어

nyc --reporter=html --reporter=text

콘솔과 html 보고서가 모두 있습니다.

NPM 테스트로 적용 범위를 실행하지 마십시오

다른 스크립트를 추가 package.json하고 test테스트 러너 (예 : 모카) 만 사용하여 스크립트를 그대로 두십시오 .

{
  "scripts": {
    "test": "mocha",
    "test-with-coverage": "nyc --reporter=text mocha"
  }
}

이제이 커스텀 스크립트를 실행하십시오

npm run test-with-coverage

코드 범위로 테스트를 실행합니다.

코드 범위가 낮은 경우 강제 테스트 실패

총 코드 범위가 90 % 미만이면 실패합니다.

nyc --check-coverage --lines 90 

하나 이상의 파일의 코드 적용 범위가 90 % 미만이면 실패합니다.

nyc --check-coverage --lines 90 --per-file

2
이것도 자스민에게도 완벽하게 작동합니다 : "nyc --reporter = html jasmine"
Sandip Subedi

12
"지금 (2017)"을 추가해 주셔서 감사합니다.이 빠르게 움직이는 자바 스크립트 세계에서 정말 도움이됩니다
kamahl

2
다른 사람이 혼란 스러울 경우 npm 저장소 이스탄불nyc에 의해 대체 된 것으로 보입니다 . 열거 된 의존성에 따라, 이스탄불은 다양한 패키지로 나뉘어져 있으며, 이들은 모두 이스탄불 모노 레포
aaaaaa

1
나는 --reporter=html활성화되어 있지만 html 파일은 항상 비어 있습니다. 표의 헤더 만 덮지 않은 블록 또는 % 덮음 등에 대해 아무것도 표시되지 않습니다
TGW

2
CLI 명령이 NYC 인 이스탄불이라는 프레임 워크? 실수 ... 난 믿지 않아!
Tivie

19

Blanket.js도 완벽하게 작동합니다.

npm install --save-dev blanket

test / tests.js 앞에서

require('blanket')({
    pattern: function (filename) {
        return !/node_modules/.test(filename);
    }
});

운영 mocha -R html-cov > coverage.html


require ( 'blanket') ({pattern : function (filename) {return! /node_modules/.test (filename);}});
jsan

4
2015 년 현재 blanket.js는 더 이상 유지 관리되지 않으며 ES6를 지원하지 않습니다. 이스탄불을 적극 권장합니다.
teroi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.