Sparametryzowane testy javascript przy użyciu Jest

Jan 07 2023
Czy kiedykolwiek zdarzyło Ci się pisać różne przypadki testowe, aby przetestować tę samą funkcjonalność, zmieniając tylko zmienne, których używasz w teście? Testy sparametryzowane służą do ponownego uruchomienia tego samego przypadku testowego, ale w różnych warunkach przy każdym uruchomieniu. Ułatwia to utrzymanie testu i pozwala uniknąć powielania.

Czy kiedykolwiek zdarzyło Ci się pisać różne przypadki testowe, aby przetestować tę samą funkcjonalność, zmieniając tylko zmienne, których używasz w teście?

Testy sparametryzowane służą do ponownego uruchomienia tego samego przypadku testowego, ale w różnych warunkach przy każdym uruchomieniu. Ułatwia to utrzymanie testu i pozwala uniknąć powielania.

Ale jak mogę go używać z Jest?

Jest dostarczane z metodą nazwaną each, która pozwala na ponowne wykonanie testu, używając za każdym razem innych danych.

Tej metody można użyć, przekazując tabelę, która zostanie przekazana do funkcji testowej i wykorzystana wewnątrz ciała testu.

Załóżmy, że masz funkcję dodawania i musisz ją przetestować z różnymi wartościami, aby móc przekazać do tabeli listy wartości, które mają być użyte, oraz oczekiwany wynik przy użyciu tych wartości.

test.each([
  [[1, 2], 3],
  [[50, 51], 101],
  [[10, 25], 35],
])('adds %i and expects %i', (numbers, result) => {
  const [firstNumber, secondNumber] = numbers
  expect(add(firstNumber, secondNumber)).toEqual(result)
})

test.each([
  {first: 1, second: 2, result: 3},
  {first: 50, second: 51, result: 101},
  {first: 10, second: 25, result: 35},
])('adds $first and $second and expects $result', ({ first, second, result }) => {
  expect(add(firstNumber, secondNumber)).toEqual(result)
})

W teście sparametryzowanym możesz także użyć wszystkich innych metod żartu, takich jak test.only.eachlub test.skip.each.

Ostatnia uwaga jest taka, że ​​jeśli używasz wersji Jest starszej niż 23.x, musisz zainstalować pakiet npm o nazwie jest-each , który pozwala napisać przypadek testowy w zasadzie w taki sam sposób, jak w nowszej wersji Jest .