모카에 대한 테스트 디렉토리를 지정하는 방법은 무엇입니까?


219

Mochatest기본적으로 테스트 파일을 찾으려고합니다 . 예를 들어 다른 디렉토리를 어떻게 지정 server-test합니까?


귀하의 질문에 100 % 답변하지는 않지만 jaketrent.com/post/run-single-mocha-test를 확인하십시오 -특정 테스트 스위트를 실행하는 방법을 찾고 여기에 귀하가 사용할 테스트 .only.skip관리 방법이 나와 있습니다 실행 중입니다. 전체 테스트 스위트가 항상 실행되기를 원하지 않는 특정 기능 개발 중 중요합니다.
Dave Sag

답변:


141

편집 :이 옵션은 더 이상 사용되지 않습니다 : https://mochajs.org/#mochaopts


mocha명령 행에서 계속 실행 하면서을 ./server-tests대신 하여 폴더에서 테스트를 실행하려면 ./test파일에서 다음 ./test/mocha.opts과 같이 파일을 작성 하십시오.

server-tests

해당 폴더와 하위 디렉토리의 모든 것을 실행하려면 다음을 입력하십시오. test/mocha.opts

server-tests
--recursive

mocha.opts 인수는 명령 행을 통해 전달되므로 첫 번째 행을 테스트를 변경하려는 디렉토리로만 변경하면 ./test/


12
이것은 마찰이 가장 적은 옵션이며 허용되는 답변이어야합니다. IMHO
Nick Tomlin

나는 보일러 플레이트 중 하나를 사용하고 있으며 다음 줄에 창 때문에있을 수 있습니다. 한번 확인하십시오 .node ./node_modules/mocha/bin/mocha $ (find api -name '* -test.js') --compilers js : babel-core / register
kobe

1
gem은 Webstorm IDE mocha 디버그 구성과도 잘 어울립니다. "파일 패턴"을 선택하고 입력을 비워두면 mocha.opts를 사용합니다.
danday74

3
그게 가장 좋은 대답입니다. 아마도 mocha.opts파일을 원하는 곳에 배치 할 수 있다는 대답에 추가 할 가치가있을 것입니다. mocha예를 들어 다음과 같이 구성 파일 경로를 지정하면됩니다.mocha --opts ./mocha.opts
quirimmo

1
패키지에 테스트 스크립트를 정의 할 때 유용한 mocha 명령 줄에 --recursive를 넣을 수도 있습니다.
json

282

이것을 사용하십시오 :

mocha server-test

또는 하위 디렉토리가있는 경우 다음을 사용하십시오.

mocha "server-test/**/*.js"

큰 따옴표를 사용하십시오. 이를 생략하면 하위 디렉토리에서 테스트를 실행하지 못할 수 있습니다.


1
이것은 나를 위해 작동하지 않습니다. 이런 식으로하고 싶다면mocha test/server-test
jonnie

22
큰 따옴표 문제는 오랫동안 나를 위해 있었다! 내 정신을 구해줘 서 고마워 이 큰 따옴표에 특별한주의를 기울이려면 이것을 읽는 모든 사람들에게 소리 지르십시오.
ctrlplusb

11
제 경우에는 사용하고있었습니다 mocha ./**/*.test.js(테스트 파일을 모듈 파일과 함께 배치 할 수 있습니다). 파일 테스트에서 나머지 테스트와 다른 레벨로 테스트 파일을 추가했을 때 패턴이 작동하지 않고 계층에서 동일한 레벨에 살았던 수십 개의 다른 파일이 아닌 홀수 볼 파일 만 발견합니다. . 따옴표로 묶으면 문제가 해결되었습니다.
Stoutie

1
또는 --recursive아래 설명과 같이 사용하십시오
Jeff Dickey

4
이것이 답이되어야합니다! 큰 따옴표는 나를 저장
민 타이

81

테스트 폴더에 하위 폴더가있는 경우 한 가지 방법이 있습니다.

/test
/test/server-test
/test/other-test

그런 다음 리눅스에서 find 명령을 사용하여 모든 * .js 파일을 재귀 적으로 나열하고 mocha에 전달할 수 있습니다.

mocha $(find test -name '*.js')

29
또는 --recursive아래 설명과 같이 사용하십시오
Jeff Dickey

5
mocha, config에서 원하는 디렉토리 구조를 설정하는 옵션이 없습니까?
Green

client user $ mocha $ (find tests -name '* .js') -bash : mocha : 명령을 찾을 수 없습니다. 이 오류가 발생했습니다.
lft93ryt

1
이것은 너무 복잡하고 오도됩니다. OS 명령을 사용하는 대신 mocha 옵션을 선호하십시오.
Michael Bushe

귀하의 게시물에 질문에 대한 답변이 없습니다
ekkis

30

이를 수행하는 좋은 방법은 package.json에 "test"npm 스크립트를 추가하여 올바른 인수로 mocha를 호출하는 것입니다. 이런 식으로 package.json은 테스트 구조를 설명합니다. 또한 다른 답변 (이중 대 작은 따옴표, "찾기"등)에서 모든 플랫폼 간 문제를 피합니다.

"test"디렉토리에서 모든 js 파일을 mocha가 실행하도록하려면 다음을 수행하십시오.

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

그런 다음 연기 테스트 호출 만 실행하려면 다음을 수행하십시오.

npm test

이러한 방식으로 모든 프로젝트에서 모든 테스트 실행을 표준화 할 수 있으므로, 새로운 개발자가 프로젝트 또는 다른 프로젝트에서 시작할 때 "npm 테스트"가 테스트를 실행할 것임을 알고 있습니다. 이것에 대한 역사적 우선 순위가 좋습니다 (예를 들어, 대부분의 오래된 학교 "make"프로젝트). 모든 프로젝트가 동일한 테스트 명령을 가지고있을 때 CI에 도움이됩니다.

마찬가지로, 모카를 실행하기를 원하는 더 빠른 "연기"테스트의 하위 집합이있을 수 있습니다.

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

그런 다음 연기 테스트 호출 만 실행하려면 다음을 수행하십시오.

npm smoketest

또 다른 일반적인 패턴은 테스트 한 소스와 동일한 디렉토리에 테스트를 배치하지만 테스트 파일 * .spec.js를 호출하는 것입니다. 예를 들어, src / foo / foo.js는 src / foo / foo.spec.js에 의해 테스트됩니다.

규칙에 따라 * .spec.js라는 모든 테스트를 실행하려면 다음을 수행하십시오.

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

그런 다음 모든 테스트 호출을 실행하십시오.

npm test

여기서 패턴을 보시겠습니까? 좋은. :) 일관성은 무라를 물리칩니다 .


이것은 내가 추측하는 가장 정확한 방법입니다.
ArturS

29

-g 또는 --grep 옵션을 사용하지 마십시오. 해당 패턴은 파일 시스템이 아닌 그 내부의 테스트 이름에서 작동합니다. 현재 문서가 이와 관련하여 오도되거나 명백히 잘못되었습니다. 전체 명령을 파일 시스템의 일부로 제한하기 위해 패턴을 마지막 인수 (플래그가 아님)로 전달할 수 있습니다.

예를 들어이 명령은 리포터를 spec으로 설정하지만 server-test 디렉토리 내부에서 js 파일 만 즉시 테스트합니다.

mocha --reporter spec server-test/*.js

이 명령은 위와 동일하게 수행되며 테스트의 it () 문자열 / 정의가 "Fnord :"로 시작하는 테스트 케이스 만 실행합니다.

mocha --reporter spec --grep "Fnord:" server-test/*.js

22

node.js 인 경우 Mocha v6 의 일부 새로운 구성 :

옵션 1 : .mocharc.json프로젝트의 루트 디렉토리에서 작성하십시오 .

{
  "spec": "path/to/test/files"
}

옵션 2 : mocha프로젝트의 속성 추가 package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

더 많은 옵션이 여기 있습니다 .


20

test_directory일치하는 하위 디렉토리를 포함하여 모든 파일을 실행하십시오.test.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

또는 --recursive스위치를 사용

mocha --recursive test_directory/

11

나는 지금이 문제가 있었고 그것을 제거하여 해결했다. --recursive 옵션 (설정 한) 위에서 제안한 것과 동일한 구조를 사용하여 .

mochify "test/unit/**/*.js"

이것은 /test/unit/내 다른 디렉토리를 무시하면서 나를 위해 모든 디렉토리에서 모든 테스트를 실행했습니다./test/


9

이제 일 (2020 년)에 mocha 구성 파일을 사용하여이를 처리 할 수 ​​있습니다 .

1 단계 : 애플리케이션 의 루트 위치.mocharc.js 파일 작성

2 단계 : mocha 구성 파일에 아래 코드추가 하십시오.

'use strict';

module.exports = {
  spec: 'src/app/**/*.test.js'
};

구성 파일의 추가 옵션에 대해서는 다음 링크를 참조하십시오. https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js


3

node.js v0.10.0 및 mocha v1.8.2 및 npm v1.2.14를 사용하는 Windows 7을 사용하고 있습니다. 나는 길을 잃고 몇 가지를 시도한 후 경로 테스트 / 단위를 사용하여 테스트를 찾기 위해 모카를 얻으려고했습니다.

"test / unit / *. js"옵션 사용은 Windows에서 작동하지 않습니다. Windows 쉘이 unixen과 같은 와일드 카드를 확장하지 않는 이유가 있습니다.

그러나 파일 패턴없이 "test / unit"을 사용하면 작동합니다. 예. "mocha test / unit"은 test / unit 폴더에있는 모든 파일을 실행합니다.

이것은 여전히 ​​하나의 폴더 파일을 테스트로 실행하지만 여러 디렉토리 이름을 매개 변수로 전달할 수 있습니다.

또한 단일 테스트 파일을 실행하려면 전체 경로와 파일 이름을 지정할 수 있습니다. 예. "mocha test / unit / mytest1.js"

실제로 npm "scripts"에 대해 package.json에서 설정했습니다 : { "test": "mocha test / unit"},

'npm test'는 단위 테스트를 실행합니다.


11
오늘 현재, --recursive다음과 같은 옵션을 사용할 수 있습니다 .mocha --recursive "some_dir"
superjos

3
사용하여 node_modules\.bin\mocha "test\unit\*.js"Windows에서 작동합니다. 또한 node_modules\.bin\mocha "**\*.js"작동합니다 (내 실제 사례). 그러나 node_modules 디렉토리 를 제외시키는 방법을 찾고 있습니다. (gulpfile.js도 사용하지만 언젠가 mocha로 직접 테스트를 시작해야합니다)
Alex 75

3

당신이 사용하는 경우 nodejs, 당신의 package.json아래scripts

  1. 대한 global (-g)설치 : "test": "mocha server-test"또는 "test": "mocha server-test/**/*.js"하위 문서에 대한
  2. 대한 project설치 : "test": "node_modules/mocha/bin/mocha server-test"또는 "test": "node_modules/mocha/bin/mocha server-test/**/*.js"하위 문서에 대한

그런 다음 테스트를 정상적으로 실행하십시오. npm test


나는 그것이 npm run mocha "./test/*.spec.js!(~)"glob 논쟁 을 무시하지만 찾지 node_modules/.bin/mocha "./test/*.spec.js!(~)"는 않습니다.
ironchicken

@ironchicken은 "npm run"에서 인수를 전달합니다npm run mocha -- yourArgs
페드로

3

의견에서 @superjos가 언급했듯이 사용

mocha --recursive "some_dir"


2

이것은 테스트 디렉토리 변경에 대한 "쉬운"지원이 아닌 것 같습니다.
그러나 질문과 관련 하여이 문제를 살펴보십시오 .


2

@ jeff-dickey가 제안했듯이 프로젝트의 루트에라는 폴더를 만드십시오 test. 해당 폴더에서이라는 파일을 만듭니다 mocha.opts. 이제 Jeff의 대답을 향상 시키려고 노력한 곳에서 하나의 테스트 폴더 이름을 지정하는 것이 아니라 다음 줄을 추가하여 프로젝트에서 실행할 모든 테스트를 찾는 패턴을 지정했습니다.

*/tests/*.js --recursivemocha.opts

테스트를 위해 정확한 폴더를 지정하려면 다음과 같이하십시오.

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

이것이 다른 답변이 제공하는 것보다 더 필요한 사람에게 도움이되기를 바랍니다.

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