programing

Jest와 함께 하나의 테스트만 실행

subpage 2023. 10. 16. 21:51
반응형

Jest와 함께 하나의 테스트만 실행

저는 Jest와 단 하나의 테스트만 실행하고 싶습니다.

사용합니다.it.only아니면describe.only.으로 약속한 만,다합니다만에 안 됩니다.only깃발이 명시적으로 설정되어 있죠?

이 동작의 원인은 무엇이며 단일 테스트를 실행하려면 어떻게 해야 합니까?

Jest는 테스트 실행을 병렬화하고 어떤 테스트를 실행해야 하고 어떤 테스트를 실행해서는 안 되는지 미리 알 수 없습니다.즉, "적합"을 사용하면 해당 파일에서 하나의 테스트만 실행됩니다. 그러나 프로젝트의 다른 모든 테스트 파일은 여전히 실행됩니다.

fit,fdescribe그리고.it.only,describe.only같은 목적을 가지고 있습니다: 다른 시험은 건너뛰고 나만 실행하는 것입니다.

출처 : https://github.com/facebook/jest/issues/698#issuecomment-177673281


Jest 필터링 메커니즘을 사용합니다.검사를 할 때는, 예를 들면,

jest --config=jest.config.json --watch

당신은 a에 의해 테스트를 필터링할 수 있습니다.testname아니면filename 지침을 만 하면 됩니다 터미널에 있는 지침대로만 하면 됩니다.

Enter image description here

p 합니다를 입력합니다.

Enter image description here

그러면 사용할 수 있습니다.describe.only그리고.it.only필터링되고 테스트된 파일에서 다른 모든 테스트를 생략합니다.

it.only그리고.describe.only모듈에 대해서만 작동합니다.데 다음을 할 수 jest -t name-of-spec 또는 테스트의 ( 기술 테스트 의).

출처: Jest CLI 옵션

를 들면, 쓰고 시험을 초점을 을 ) ()package.json):
npm test -- -t "test foo"

이런 식이야:

jest sometest.test.js -t "some expression to match a describe or a test"

이 합니다인 합니다.sometest.test.jst합니다를 합니다.특정 파일만 테스트하려는 경우 다음 작업을 수행할 수 있습니다.

jest src/user/.../sometest.test.js

저의 경우 다음과 같은 두 개의 매개 변수를 사용하면 작동합니다.

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

플래그:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your test

제스트가 당신과 같은 일을 할 수 있도록 명령어를 만들었습니다.이 작업은 진행 중이지만 다음과 같이 작업해야 합니다.

.only트합니다가 합니다..only.

grep --exclude-dir=node_modules -rl . -e 'test.only\|it.only\|describe.only' --null | tr '\n' ' ' | xargs -0 npx jest | grep . || npx jest

일부 에지 경우에는 작동하지 않더라도 참조로 사용할 수 있습니다.여기서 좀 더 최신 상태를 유지할 수도 있겠습니다.

이에 대한 별칭을 생성하거나 셸 스크립트 또는 패키지에 넣을 수 있습니다.json 대본.

: The| grep . || npx jest는 입력 한 번 .xargs되지 않기 .보통은 필요 없을 수도 있습니다.

전체 경로를 입력하려고 하면 파일이 존재하고 몇 개의 주장이 있더라도 해당 패턴과 일치하는 결과가 0으로 나타납니다.

https://stackoverflow.com/a/44446669/3957754 에 따르면 .only는 농담으로 무시되며 앞으로도 무시됩니다.

이것은 저에게 효과가 있었습니다. 단지 리눅스 사용자들에게만 효과가 있었습니다.

  • 배시 스크립트를 작성합니다.
  • grep을 사용하여 "only"라는 단어가 포함된 파일 찾기
  • jest foo.test.js bar.test.js bar.test.js 파일 전달

test.sh

filtered_test=$(grep -rnwl ./src/test -e "test.only\|it.only\|describe.only" --include \*.js | tr '\n' ' ')
jest --coverage --silent --runInBand --detectOpenHandles $filtered_test

꾸러미의json

"scripts": {
  "start": "...",
  "dev": "...",
  "test": "./src/test/test.sh"
},

결과: 가 있는 테스트만 실행됩니다.

enter image description here

참고1: 테스트가 다음과 같이 진행되지 않을 경우src/testbash 스크립트 및 패키지에서 해당 값을 변경합니다.json

참고 2: 간단한 npm 모듈을 만들어 쉽게 실행할 수 있습니다.

간단한 자동화된 해결 방법은 bash 스크립트를 사용하여 jest 명령을 생성하고 실행하는 것입니다.

tools/runJest.sh

#!/bin/bash

function main() {
  local testDir="test"
  local testFiles="$(grep -rl '\.only(' $testDir | grep '\.test\.js$' | xargs)"

  if [ -z "$testFiles" ]; then
    runJest "--testPathPattern=test/unit"
  else
    runJest "$testFiles"
  fi
}

function runJest() {
  local testFiles="$1"
  local cmd="jest --logHeapUsage -c jest.config.js $testFiles"

  echo "Running cmd: $cmd"
  $cmd
}

main "$@"

작업 내용:

  • 모든 테스트 파일을 찾습니다..only(그 안에
  • 있는 경우에는.only(hits, hits가 있는 파일에서만 jest를 실행
  • 그렇지 않으면 일반 jest config를 실행합니다.

실행 가능한 권한을 bash 스크립트에 추가해야 합니다.

chmod +x tools/runJest.sh

또한 스크립트의 검색 기준(폴더, 파일 이름 패턴)을 특정 설정으로 수정합니다.

꾸러미의json 스크립트.test

대신에

{
  "scripts": {
    "test": "jest --logHeapUsage --testPathPattern=test/unit -c jest.config.js"
  }
}

작업:

{
  "scripts": {
    "test": "tools/runJest.sh"
  }
}

언급URL : https://stackoverflow.com/questions/44446626/run-only-one-test-with-jest

반응형