Как увеличить охват ветвей в тестовом примере junit для цикла for с условием if?

avatar
Kathiravan K
8 августа 2021 в 17:17
223
1
0

Мой тестовый файл Javascript "buildButtons.js"

let viewButtonList = [
  { buttonLink: "about", buttonLabel: "ABOUT" },
  { buttonLink: "contact", buttonLabel: "CONTACT" },
  { buttonLink: "prodcucts", buttonLabel: "PRODUCTS" },
  { buttonLink: "don't include", buttonLabel: "DON'T INCLUDE" }
]

let buttonList = []

let buildButtons = true

export function buildButtonList() {
  for (let item of viewButtonList) {
    if (buildButtons) {
      buttonList.push(item)
    }
  }
  return buttonList.filter(item => item.buttonLink !== "don't include")
}

А вот мой тестовый файл junit для "buildButtons.js"

import { buildButtonList } from "@/common/test.js"

let viewButtonList = [
  { buttonLabel: "ABOUT", buttonLink: "about" },
  { buttonLabel: "CONTACT", buttonLink: "contact" },
  { buttonLabel: "PRODUCTS", buttonLink: "prodcucts" },
  { buttonLabel: "DON'T INCLUDE", buttonLink: "don't include" }
]

let mockButtonList = [
  { buttonLabel: "ABOUT", buttonLink: "about" },
  { buttonLabel: "CONTACT", buttonLink: "contact" },
  { buttonLabel: "PRODUCTS", buttonLink: "prodcucts" }
]

let buttonList = []

let buildButtons = true

describe("Test buildButtonList function", () => {
  it("Should call the function 'buildButtonList'", () => {
    expect(buildButtonList()).toEqual(mockButtonList)
  })
})

А вот результат покрытия кода моего теста.

результат тестового покрытия для buildButtons

Кто-нибудь, пожалуйста, предложите получить 100% охват кода при тестировании этого кода в тестовых примерах junit. Я пытался, но не смог охватить строку, где условие if внутри цикла for.

Источник

Ответы (1)

avatar
Matriarx
8 августа 2021 в 18:11
0

Я точно не знаю, что вы имеете в виду под "покрытием ветвей" в "цикле for", но вы можете указать, какой процент ветвей, функций и строк кода следует тестировать.

// .jestrc.json

"coverageThreshold": {
  "global": {
    "branches": 80,
    "functions": 80,
    "lines": 40,
    "statements": -20
  }
},

Вышеприведенное заставит вас охватить 80% ветвей, 80% функций и 40% строк. Если вы используете цикл, я предлагаю поместить его в функцию, чтобы шутка захватывала покрытие самой функции.

Примечание: я обнаружил, что установка значения 100 % не является хорошей идеей в большинстве проектов, потому что функции экспресс-маршрутизатора и инициализация сервера socket.io на самом деле не могут быть протестированы так, как этого ожидает шутка, так что вы имейте некоторые «раскрытые» тесты по шутке, даже если вы действительно их тестировали. 100% вас просто разочаруют.