Testes de javascript parametrizados usando Jest

Jan 07 2023
Você já se pegou escrevendo diferentes casos de teste para testar a mesma funcionalidade para variar apenas as variáveis ​​que está usando em seu teste? Os testes parametrizados são usados ​​para executar novamente o mesmo caso de teste, mas em condições diferentes a cada execução. Isso torna o teste mais fácil de manter e evita duplicações.

Você já se pegou escrevendo diferentes casos de teste para testar a mesma funcionalidade para variar apenas as variáveis ​​que está usando em seu teste?

Os testes parametrizados são usados ​​para executar novamente o mesmo caso de teste, mas em condições diferentes a cada execução. Isso torna o teste mais fácil de manter e evita duplicações.

Mas como eu uso isso com o Jest?

Os globais Jest vêm com um método nomeado eachque permite que seu teste seja executado novamente, usando dados diferentes a cada vez.

Este método pode ser usado passando uma tabela, que será passada para sua função de teste e usada dentro do corpo do seu teste.

Vamos supor que você tenha uma função add e precise testá-la com diferentes valores, para poder passar para a tabela listas de valores a serem usados ​​e o resultado esperado ao usar esses valores.

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)
})

Você também pode usar todos os outros métodos jest com seu teste parametrizado, como test.only.eachou test.skip.each.

Uma observação final é que, se você estiver usando uma versão do Jest anterior a 23.x, precisará instalar um pacote npm chamado jest-each que permite escrever um caso de teste basicamente da mesma maneira que temos com uma versão mais recente do Jest .