programing

jeast --coverage를 실행할 때 Branchs 열은 무엇을 의미합니까?

batch 2023. 2. 25. 20:08
반응형

jeast --coverage를 실행할 때 Branchs 열은 무엇을 의미합니까?

테스트를 실행한 결과 다음과 같은 결과가 나왔습니다.

---------------|----------|----------|----------|----------|-------------------| File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s | ---------------|----------|----------|----------|----------|-------------------| All files | 100 | 0 | 100 | 100 | | Search | 100 | 100 | 100 | 100 | | index.js | 100 | 100 | 100 | 100 | | SearchResults | 100 | 0 | 100 | 100 | | index.js | 100 | 0 | 100 | 100 | 4 | ---------------|----------|----------|----------|----------|-------------------| Test Suites: 2 passed, 2 total Tests: 5 passed, 5 total Snapshots: 1 passed, 1 total Time: 4.678s 뭔가 변경되어 Branch column에 0%가 표시되어 있습니다만, 개선의 의미를 알 수 없습니다.

조건문은 실행되지 않을 수 있는 코드 분기를 생성합니다(예: if/else).이 메트릭은 실행된 브랜치 수를 나타냅니다.

실행 중에 건너뛸 수 있는 모든 블록, 행, 문 또는 문 일부에 대해 분기가 존재합니다.이는 if-then-else, switch-case-default 또는 ternary 연산자의 결과일 수 있습니다.

회선 커버리지가 100%이면서도 지점 커버리지가 100% 미만인 경우는 여러 가지가 있습니다.코드가 잘 정리되어 있는 경우, 가장 가능성이 높은 설명은 배타적인 코드 행이 없는 브랜치(즉, 코드를 건너뛸 수 있지만 대체 코드나 추가 코드를 실행하지 않는 조건)가 존재하는 것입니다.예를 들어, 다음 함수를 사용합니다.

function invertIf(val,flag) {
  if (flag) {
    val = val * -1;
  }
  return val;
}

단일 테스트를 true와 동일한 플래그를 사용하여 실행하면 모든 행과 스테이트먼트가 평가되지만(커버리지 100% 제공), 일부 행이 실행되지 않고(플래그가 false일 때), 테스트 케이스가 없기 때문에 100% 브랜치커버리지가 됩니다.

한 줄에 여러 개의 문이 있는 경우 회선 범위보다 작은 문장의 커버리지를 얻을 수 있습니다.이 시나리오에서는 브랜치 커버리지가 100% 미만인 경우도 있습니다.예를 들어 다음과 같습니다.

function isFoo(a) {
  if (a=='Foo') {return true;} else {return false;}
}

1개의 테스트 케이스로 100% 회선 커버리지가 달성되지만 100% 스테이트먼트 또는 브랜치 커버리지가 달성되지 않습니다.이것은 아마도 코드를 재정비해야 하는 증상일 것입니다.(한 줄에 여러 개의 문이 있을 수 있듯이 한 줄에 여러 줄이 있을 수도 있습니다.)

다음 예시와 같이 3진 연산자를 사용하여 여러 브랜치를 하나의 스테이트먼트에 넣을 수도 있습니다.

function isBar(a) {
  return a == 'Bar' ? true : false}
}

if-then-else를 사용하여 논리적으로 동등한 함수를 작성할 수 있지만 if-then-else와 달리 3진 연산자의 사용은 2개의 분기가 있는 단일 문장으로 간주됩니다(삼진 연산자가 중첩된 경우 또는 그 이상이지만 이 작업을 수행하는 경우에는 사용하지 않는 것이 좋습니다).

이 모든 것은, 100%의 진술에 근거해, 0%의 지점 커버리지를 얻을 수 있는 방법을 알 수 없습니다.코드의 스테이트먼트를 100% 실행했을 경우는, 한정된 수의 브랜치로부터 적어도1개의 브랜치를 실행해 둘 필요가 있습니다.실행 가능하지만 너무 복잡하거나 분석기가 브런치를 계산하는 방법을 모르는 너무 난해한 코드가 있을 것으로 추측됩니다.이러한 상황에서는 분석기를 사용할 수 없는 경우 수동으로 분기 범위를 검토해야 하므로 기본값이 0%가 될 수 있습니다.그러나 나는 이러한 행동을 보이는 어떠한 예도 가지고 올 수 없었다.

언급URL : https://stackoverflow.com/questions/49843670/when-you-run-jest-coverage-what-does-the-branches-column-do-mean

반응형