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.