Jest를 사용하여 단일 테스트를 어떻게 실행합니까?


355

파일 fix-order-test.js 내에 '네스트 된 자식과 함께 작동합니다'테스트가 있습니다.

아래를 실행하면 파일의 모든 테스트가 실행됩니다.

jest fix-order-test

단일 테스트 만 실행하려면 어떻게합니까? 아래는 지정된 정규식 파일을 검색 할 때 작동하지 않습니다.

jest 'works with nested children'


당신이 농담 명령 줄을 사용하기 때문에, 아마 NPM을 통해 다음 바로 추가 --testNamePattern 'works with nested children' 농담 CLI 옵션 #testNamePattern
steven87vt

@BioGenX : 링크가 끊어졌습니다
Dan Dascalescu

답변:


427

명령 행에서 --testNamePattern또는 -t플래그를 사용하십시오.

jest -t 'fix-order-test'

제공 한 테스트 이름 패턴과 일치하는 테스트 만 실행합니다. 그것은에서의 농담 문서 .

다른 방법은 감시 모드에서 테스트를 실행 jest --watch한 다음을 눌러 p테스트 파일 이름을 입력하여 테스트를 필터링하거나 t단일 테스트 이름을 실행하는 것입니다.


당신은 블록 의 it내부 가 있다면 describe, 당신은 실행해야합니다

jest -t '<describeString> <itString>'

-t에 대해 인식 할 수없는 옵션이 나타납니다. 예, 설명서에 언급되어 있습니다. 이 플래그는 16.0에서 추가되었습니다. 최신 버전입니다. jest -help가 플래그를 언급하지 않는 것 같습니다. 감사.
vijayst

12
이것은 it()파일 이름이 아니라 함수 내부의 특정 테스트 이름에 대한 테스트 패턴입니다 . 내가 생각한 것입니다.
HussienK

70
npm 테스트를 사용하는 경우 다음을 수행해야합니다npm test -- -t "fix order test"
Sarsaparilla

3
이것은 저에게 효과적이지만 대규모 프로젝트의 경우 느린 프로젝트의 다른 모든 테스트를 건너 뜁니다. 테스트중인 특정 테스트 파일을 지정하면 실제로 도움이됩니다../node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
anon58192932

와 나를위한 작품 w / O를 지정하는 <describeString>, 내가 그것을 모카의 그렙 (-g '되는 searchString')보다 느리게 크기입니다 발견했습니다 -하지만 난 :-) 걸릴거야
schmoopy을

124

Jest 문서 는 다음을 권장합니다.

테스트에 실패한 경우 가장 먼저 확인해야 할 사항 중 하나는 테스트가 유일한 테스트 일 때 테스트에 실패했는지 여부입니다. Jest에서는 테스트를 하나만 실행하는 것이 간단합니다. 일시적으로 해당 test 명령을test.only

test.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

또는

it.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

7
jest 20.0.4와 함께 작동합니다. 해당 파일의 나머지 테스트 만 건너 뛰지 만. 실행을 이미 한 파일로 제한하지 않은 한 다른 파일의 테스트는 계속 실행됩니다.
Holf

7
그것은 비참한 일입니다-테스트를 ​​비동기 적으로 실행하기 때문에 처음부터 어떤 파일에서 어떤 테스트를 실행할지 결정할 수 없습니다. 따라서 기본적으로 모든 파일을 실행하고 파일 내에서 확인합니다 test.only. 그래서 당신은 불행하게도 것을 실행 당신은 여러 개의 파일로 구성을 testcases의 제품군 내에서 많은 테스트 케이스를 가진 파일 내에서 하나의 파일 하나 개의 테스트를 실행하려면jest myTestFile.test.js
색다른

@ johnslay : 그것은, 그냥 테스트
색다른

@flaky 나는 그것이 실행될 때 작동하지 않는다고 말하려는 것 같아요 npm test. 파일을 단독으로 실행하거나을 눌러 p필터를 설정해야합니다.
johnslay

3
@ johnslay 잘, 귀하의 답변을 작성하기 전에 이전 의견을 읽어 주셔서 감사합니다 나는 추측 / s :)
flaky

55

다른 답변에서 언급했듯이 test.only동일한 파일에서 다른 테스트를 필터링하면됩니다 . 따라서 다른 파일의 테스트는 계속 실행됩니다.

따라서 단일 테스트를 실행하려면 두 가지 방법이 있습니다.

  • 옵션 1 : 테스트 이름이 고유 한 경우 t시계 모드에서 입력하고 실행할 테스트 이름을 입력 할 수 있습니다.

  • 옵션 2 :

    1. p감시 모드에서 적중 하려는 파일 이름의 정규식을 입력하십시오. (시계 모드에서 Jest를 실행하면 이와 같은 관련 명령이 표시됩니다).
    2. 변경 itit.only당신이 실행하고자하는 테스트합니다.

위의 방법 중 하나를 사용하면 Jest는 지정한 파일에서만 단일 테스트를 실행합니다.


53

단일 Jest 테스트를 실행하기위한 전체 명령

명령:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"

  • <path-to-jest>:
    • 윈도우 : node_modules\jest\bin\jest.js
    • 기타 : node_modules/.bin/jest
  • -i <you-test-file>: 테스트가있는 파일의 경로 ( js또는 ts)
  • -c <jest-config>: 별도의 Jest 구성 파일 (JSON) 경로, Jest 구성을 유지 package.json하는 경우이 매개 변수를 지정할 필요가 없습니다 (Jest는 사용자의 도움없이 찾을 수 있음)
  • -t <the-name-of-test-block>: 실제로는의 이름 (제 파라미터)이다 describe(...), it(...)또는 test(...)블록.

예:

describe("math tests", () => {

  it("1 + 1 = 2", () => {
    expect(1 + 1).toBe(2);
  });

  it("-1 * -1 !== -1", () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

따라서 명령

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"

테스트 it("1 + 1 = 2", ...)하지만 -t매개 변수를 "math tests"로 변경 하면 describe("math tests",...)블록 에서 두 테스트를 모두 실행합니다 .

비고 :

  1. Windows의 교체 node_modules/.bin/jest와 함께 node_modules\jest\bin\jest.js.
  2. 이 방법을 사용하면 실행중인 스크립트를 디버깅 할 수 있습니다. 디버깅 을 활성화하려면 '--inspect-brk'명령 에 매개 변수를 추가하십시오 .

'package.json'에서 NPM 스크립트를 통해 단일 Jest 테스트 실행

Jest를 설치하면 NPM 스크립트 를 사용하여이 명령의 구문을 단순화 할 수 있습니다 . 에서 것은 "package.json"받는 새로운 스크립트를 추가 "scripts"섹션 :

"scripts": {
  "test:math": "jest -i test/my-tests.js -t \"math tests\"",
}

이 경우 'jest'전체 경로를 작성하는 대신 별칭을 사용합니다. 또한 구성 파일 경로도 지정할 수 없으므로 "package.json"Jest는 기본적으로 경로를 조사합니다. 이제 다음 명령을 실행할 수 있습니다.

npm run test:math

상기 "math tests"두 실험과 블록이 실행된다. 또는 하나의 특정 테스트를 이름으로 지정할 수도 있습니다.

또 다른 옵션은 스크립트 <the-name-of-test-block>외부에서 매개 변수 를 가져 "test:math"와서 NPM 명령에서 전달하는 것입니다.

package.json :

"scripts": {
  "test:math": "jest -i test/my-tests.js -t",
}

명령:

npm run test:math "math tests"

이제 훨씬 짧은 명령으로 테스트 실행 이름을 관리 할 수 ​​있습니다.

비고 :

  1. 'jest'명령은 NPM 스크립트와 함께 작동하므로

    npm 은 라이프 사이클 스크립트를 실행할 때 환경 변수 "./node_modules/.bin"의 첫 번째 항목을 PATH작성하므로 프로그램이 전체적으로 설치되지 않은 경우에도 정상적으로 작동합니다 ( NPM 블로그 )

  2. 이 방법은 농담이를 통해 실행되기 때문에 디버깅을 허용하지 않는 것 진 / CLI 하지 통해 node.

Visual Studio Code에서 선택된 Jest 테스트 실행

Visual Studio Code를 사용하는 경우이를 사용하여 F5버튼 을 눌러 현재 선택된 테스트 (코드 편집기에서)를 실행할 수 있습니다 . 이를 위해 파일 에 새로운 시작 구성 블록 을 만들어야 ".vscode/launch.json"합니다. 이 구성에서 우리는 실행할 때 적절한 (불행히도 항상 그런 것은 아님 ) 값 으로 대체되는 사전 정의 된 변수 를 사용 합니다. 사용 가능한 모든 것 중에서 우리는 다음에 만 관심이 있습니다.

  • ${relativeFile} -현재 열린 파일 ${workspaceFolder}
  • ${selectedText} -활성 파일에서 현재 선택된 텍스트

그러나 launch config를 작성하기 전에 'test'스크립트를 추가해야합니다 'package.json'(아직없는 경우).

package.json :

"scripts": {
  "test": "jest"
}

시작 설정에서 사용할 수 있습니다.

구성 시작 :

{
  "type": "node",
  "request": "launch",
  "name": "Run selected Jest test",
  "runtimeExecutable": "npm",
  "runtimeArgs": [
    "run-script",
    "test"
  ],
  "args": [
    "--",
    "-i",
    "${relativeFile}",
    "-t",
    "${selectedText}"
  ],
  "console": "integratedTerminal",
}

실제로이 답변의 앞에서 설명한 명령과 동일합니다. 이제 모든 것이 준비되었으므로 명령 매개 변수를 수동으로 다시 작성하지 않고도 원하는 테스트를 실행할 수 있습니다.

여기 당신이해야 할 모든 것이 있습니다 :

  1. 디버그 패널에서 현재 작성된 실행 구성을 선택하십시오.

VSCode 디버그 패널에서 launch config를 선택하십시오.

  1. 코드 편집기에서 테스트와 함께 파일을 열고 테스트하려는 테스트 이름을 따옴표없이 선택하십시오.

시험 명 선택

  1. 보도 'F5'버튼을 누릅니다.

그리고 짜잔!

이제 편집기에서 열고 싶은 테스트를 실행하려면 이름을 선택하고 F5를 누르십시오.

불행히도 Windows 시스템에서는 슬래시가 반전 된${relativeFile} 경로로 변수를 대체하고 이유를 알기 때문에 Jvo는 "voila" 가 아닙니다 .Jest는 그러한 경로를 이해하지 못합니다.

비고 :

  1. 디버거에서 실행하려면 '--inspect-brk'매개 변수 를 추가하는 것을 잊지 마십시오 .
  2. 이 구성 예에서는에 포함되어 있다고 가정 한 Jest 구성 매개 변수가 없습니다 'package.json'.

1
우수한! 이것이 정답입니다. 특히 npxOS에 관계없이 Jest 호출을 크게 단순화 한다는 언급이 있다면 .
Dan Dascalescu

19

당신은 또한 사용할 수 있습니다 f또는 x초점 또는 시험을 제외 할 수 있습니다. 예를 들어

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});

1
이 답변이 왜 다운 보트인지 확실하지 않으면 질문에 대한 답변으로 작동합니다.
mbillard

1
xit나를 위해 일했지만 fit하지 않습니다. jest@22.4.4를 사용하고 있습니다.
Hinrich

fitjest@23.1.0에서 작동합니다.
jcubic

이 접근법의 주요 단점은 버그를 해결하기 위해 한 번의 테스트로 드릴 다운하려는 경우 기본 테스트 파일을 불필요하게 변경하는 것입니다. 어떤 이유로 든 테스트 코드를 유지하려는 경우 (예 : 커밋).
webelo

f하나의 파일 내에서만 작동합니다.
Sergey

14

위에서 말했듯이 명령을 실행할 수 있습니다

jest -t 'fix-order-test'

당신은 블록 의 it내부 가 있다면 describe, 당신은 실행해야합니다

jest -t '<describeString> <itString>'

13

jest과 같은 스크립트 명령으로 실행 한 경우 npm test다음 명령을 사용하여 작동시켜야합니다.

npm test -- -t "fix order test"

8

최신 농담 버전 , 당신은 테스트 스위트에 대한 동일한에서만 실행 한 테스트로 다음 중 하나를 사용할 수 있습니다.

it.only('test 1', () => {})

test.only('test 1', () => {})

fit('test 1', () => {})

jest 'test 1' 테스트 이름이 고유 한 경우에도 작동 할 수 있습니다.


4

VS 코드에서는 중단 점을 사용하여 1 개의 Jest 테스트 만 실행 / 디버그 할 수 있습니다. https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

launch.json안에 이것을 가지고 있습니다 :

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest All",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["--runInBand"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Jest Current File",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["${relativeFile}"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    }
  ]
}

그리고 이것은 package.json:

  "scripts": {
    "test": "jest"
  }
  • 1 개의 테스트를 실행하려면 해당 테스트에서 test(또는 it)를 test.only(또는 it.only)로 변경하십시오. 1 개의 테스트 스위트 (여러 테스트)를 실행하려면로 변경 describe하십시오 describe.only.
  • 원하는 경우 중단 점을 설정하십시오.
  • VS Code에서 디버그보기 (Shift + Cmd + D)로 이동하십시오.
  • 상단의 드롭 다운 메뉴에서 Jest Current File .
  • 테스트를 실행하려면 녹색 화살표를 클릭하십시오.

필자의 경우, 구성은 하나의 테스트 (it.only (...)) 만 실행하지만 중단 점에서 멈추지 않습니다 :(
Tudor Leustean

디버거에서 중단 점에 도달하도록 JavaScript를 가져 오는 것은 비동기 특성으로 인해 까다로울 수 있습니다. VS Code에서 중단 점을 배치 한 위치와 디버그 메뉴의 명령이 충돌 할 때까지 명령을 실행하십시오. 중단 점을 계속 건너 뛰면 코드에 EARLIER를 배치하십시오. 한 파일이 다른 파일에서 함수를 호출하는 경우 해당 함수 호출에 중단 점을 둔 다음 호출을 "단계로 이동"하여 파일을 이동하십시오. "Step Over, Step Into, Step Out, Continue"
Raymond Gan

사실, 당신은 필요가 없습니다 "scripts": { "test": "jest" }package.json당신은에 전체 경로를 지정했기 때문에 "program"의 매개 변수를 launch.json.
Sergey

3

여기 내 테이크가 있습니다 :

./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'

노트:

  • ./node_modules/.bin/...로컬로 설치된 패키지와 함께 제공된 로컬로 설치된 jest (또는 mocha 또는 ...) 바이너리에 액세스하는 훌륭한 방법입니다. (예, npm 스크립트 jest에서는 이전에 아무것도 할 수 없지만 이것은 명령 줄에서 편리합니다 ... (또한 디버깅 구성, 어느 IDE를 사용하든 좋은 시작입니다 ...)
  • 프로젝트에 구성 옵션 세트가 없을 수 있습니다. 그러나 그렇다면 (스크립트를 들여다보십시오.package.json ) 이것이 필요한 것입니다.
  • --runInBand 말했듯이 구성에 대해서는 알지 못하지만 단일 테스트 개발 / 수정에 집중하면 웹 작업자를 다루고 싶지 않습니다 ...
  • 예, 파일의 전체 경로를 명시 적으로 지정할 수 있습니다
  • 선택적-t 으로 해당 파일의 모든 테스트를 실행하지 않고 단일 테스트 (여기서는 show expanded이름에 ' ' 가있는 테스트) 만 실행할 수 있습니다 . .only()해당 파일 을 붙이면 동일한 효과를 얻을 수 있습니다 .

3

그냥 약간의 애드온을 사용하면, ./node_modules/.bin/jest -i ...아니면 그냥 jest -i ...또는npm test -- -i ...

  1. jestnpm install -g jest와 같이 전 세계에 설치 한 경우 호출을 작동합니다.
  2. npx jest -i ...jest가 패키지에 로컬로만 설치되어 있고 npm 스크립트 우회없이 jest 스크립트를 호출하려는 경우 =>를 사용할 수 있습니다. 이것은 npx를위한 것입니다. 글쓰기에서 당신을 저장./node_modules/.bin/...


0
npm run test -- test-name

테스트 사양 이름이 고유 한 경우에만 작동합니다. 위의 코드는 참조 할 것입니다

이 이름을 가진 파일 : test-name.component.spec.ts

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