Mocha로 단일 테스트를 실행하는 방법은 무엇입니까?


291

JavaScript를 테스트하기 위해 Mocha를 사용합니다. 내 테스트 파일에는 5 가지 테스트가 있습니다. 파일의 모든 테스트가 아닌 특정 테스트 (또는 테스트 세트)를 실행할 수 있습니까?

답변:


355

mocha의 --grep옵션을 사용해보십시오 :

    -g, --grep <pattern>            only run tests matching <pattern>

유효한 모든 JavaScript 정규식을로 사용할 수 있습니다 <pattern>. 예를 들어, 우리가있는 경우 test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

그때:

$ mocha -g 'logs a'

단일 테스트를 실행합니다. 이것은 모든 이름 describe(name, fn)과 it(name, fn)호출 의 이름을 가로지 릅니다 .

describe()특정 세트를 쉽게 찾고 선택할 수 있도록 네임 스페이스에 중첩 된 호출을 사용 하십시오.


1
감사! 태그 --grep에서만 필터링 된 노출 아래있었습니다 @.
— kumarharsh

5
프로그래밍 방식으로 Mocha를 사용하는 경우 (예 : Grunt에서) catch : grep 옵션은“RegExp ()”객체 여야합니다. 문자열이면 이스케이프됩니다.
— h-kippo

1
이것은 나를 위해 일한 유일한 솔루션입니다. 명령 줄 ( mocha some/test.js) 에서 파일을 지정해 도 전혀 작동하지 않았습니다. 감사!
— hraban

2
하위 문자열 logs a bcd이 포함 된 실행을 피하는 방법은 logs a무엇입니까? 정규식이 ^$0.10.2에서 작동하지 않습니다.
— Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

디렉토리를 mocha -g 'logs a'로 지정하지 않으면 오류가 발생합니다.
— kta

165

사용자의 사용 패턴에 따라, 당신은 단지 사용하는 것 같아서 단지 . 우리는 TDD 스타일을 사용합니다. 다음과 같이 보입니다 :

test.only('Date part of valid Partition Key', function (done) {
    //...
}

이 테스트 만 모든 파일 / 스위트에서 실행됩니다.


5
BDD도 동일하게 작동합니다. 단일 테스트를 수행 할 때 유용합니다. 또한 스위트 / 설명 수준에서 사용할 수 있습니다
— andyzinsser

14
차이와 함께 구문을 기대합니다 it.only.
— elkelk

4
카르마 내부에서 모카를 사용할 때도 효과가있을
— 것이기 때문에이

2
it.only와 함께 작동하지 않습니다 given의 모카 testdata로 . 나중에 제거하는 것을 잊어 버리기 쉽습니다.
— Tr1et

4
eslint-plugin-mochano-exclusive-tests당신이 제거하는 것을 잊었을 때 당신을 잡을 규칙 이 있습니다 .only.
— dostu

84

당신이 사용하는 경우 npm test(package.json 스크립트를 사용) 추가를 사용 --모카에 이르기까지 PARAM을 전달하는

예 : npm test -- --grep "my second test"

편집 : --grep약간 까다로운 것처럼 보일 수 있습니다 (아마 다른 주장에 따라 다름). 당신은 할 수 있습니다 :

package.json을 수정하십시오.

"test:mocha": "mocha --grep \"<DealsList />\" .",

또는 --bail덜 까다로운 것으로 보이는 대안 사용

npm test -- --bail

3
나를 위해 일했다. 감사합니다 :)
— Jill-Jênn Vie

1
@Andy --grep 는 약간 까다로울 수 있습니다 -npm 스크립트 항목 내에 mocha 바로 뒤에 넣으십시오. Else npm test -- --bail는 첫 번째 테스트 실패 후
— 자전거 타기에

1
--grep내 하루 를 저장 하기 전에 추가 대시를 통과 ! 고마워 추신. 나는 Windows에서 실행 중npm test -- --grep @tag
— Mykola

18

파일 이름으로 단일 테스트 실행 –

실제로 mocha.opts에서 glob 패턴 (예 :) 을 제거하면 파일 이름으로 ( "it () ./test/**/*.spec.js-string -grepping"이 아니라) 단일 모카 테스트 를 실행할 수도 있습니다 .

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

여기 내 mocha.single.opts가 있습니다 (앞서 언급 한 글로브 라인이 누락 된 경우에만 다릅니다)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

배경 : opts-File에서 시작하는 다양한 스위치를 재정의 할 수 있지만 glob를 재정의-- 할 수는 없습니다 . 이 링크에는 설명도 있습니다.

힌트 : 경우 node_modules/.bin/mocha혼란이 로컬 패키지 모카를 사용 할 수 있습니다. mocha전 세계에 설치 한 경우 바로 작성할 수도 있습니다 .


그리고 당신이 편안함을 원한다면 package.json: 여전히 :에서 **/*-ish glob를 제거 mocha.opts하고 여기에 삽입하십시오. 모든 테스트를 위해 단일 테스트를 위해 남겨 두십시오.

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",

용법:

> npm run test

각기

> npm run test-single -- test/ES6.self-test.spec.js 

( --!)


설정에 $ 1이 필요하지 않았습니다. 대신 다음과 같은 경고가 표시됩니다. Warning: Could not find any test files matching pattern: $1
— Merijn Vogel

15

'describe', 'it'또는 'context'전에. 만 사용하십시오. "$ npm run test : unit"을 사용하여 실행하며 .only 만있는 장치 만 실행합니다.

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

11

위의 솔루션은 저에게 효과적이지 않았습니다. 단일 테스트를 실행하는 다른 방법은

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

이는 단일 파일에서 특정 이름으로 테스트 사례를 실행하는 데 도움이됩니다.


1
충분히 선택적인 표현식 -g을 사용하면 파일 이름을 지정할 필요가 없습니다. 선택적인 표현을 작성할 수 없다면 테스트의 이름을 올바르게 지정하지 않은 것입니다.
— Louis

10
npm test <filepath>

예 :

npm test test/api/controllers/test.js

여기 'test / api / controllers / test.js'는 파일 경로입니다.


8

당신은 "it.only"를 시도 할 수 있습니다

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

이것에서 첫 번째 만 실행됩니다


2
--forbid-onlyCI / 빌드 서버에서 테스트를 실행하지 않으면 위험 합니다. .only주요 지점으로 몰래 들어가고 다른 테스트는 더 이상 실행되지 않으므로 음소거하는 경향이 있습니다. 다른 기능을 테스트하기 위해 코드를 변경하는 워크 플로우를 생각하게되었습니다. 테스트 실행자는 개발자가 아닌 어떤 테스트 (일명 태그 테스트)를 실행해야하는지 결정해야합니다.
— k0pernikus

나는 이것을 로컬에서 하나의 기능을 테스트하기 위해 사용했다. 참고 : it.onlyrepo로 코드를 커밋하지
— 마라


0

npm test를 사용할 때 grep 방법이 왜 작동하지 않는지 잘 모르겠습니다. 그래도 작동합니다. 또한 어떤 이유로 테스트 폴더를 지정해야합니다.

NPM 테스트-test / sometest.js


0

하나의 test.js 파일에서 모든 테스트를 통합하고 패키지 json은 다음과 같이 스크립트를 추가합니다.

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

테스트 디렉토리에서 command를 입력하십시오.

npm run api:test
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.