14.7.2021 |

Tabellengetriebene Tests mit Jest

Tabellengetriebene Tests ("table-driven tests") können dabei helfen, Boilerplate in ähnlichen Tests zu vermeiden.

describe.each vereinfacht Test Suites, welche mit verschiedenen Daten arbeiten, aber die selbe Funktion testen.

Dabei sind zweierlei Arten von Syntax moeglich.

Zum einen kann man eine Tabelle als Array erstellen. Hier kann man mit String Interpolation arbeiten: Beispiel in der Jest Dokumentation.

Die schönere Variante ist es, der Test-Tabelle ein Array mit Objekten zu geben, welche die Eingabe-Werte und das zu erwartende Ergebnis widerspiegeln.

Beispiel:

describe.each([
  {a: 1, b: 1, expected: 2},
  {a: 1, b: 2, expected: 3},
  {a: 2, b: 1, expected: 3},
])('.add($a, $b)', ({a, b, expected}) => {
  test(`returns ${expected}`, () => {
    expect(a + b).toBe(expected);
  });

  test(`returned value not be greater than ${expected}`, () => {
    expect(a + b).not.toBeGreaterThan(expected);
  });

  test(`returned value not be less than ${expected}`, () => {
    expect(a + b).not.toBeLessThan(expected);
  });
});

Zudem kann man Tagged Template Literals nutzen.

Beispiel:

describe.each`
  a    | b    | expected
  ${1} | ${1} | ${2}
  ${1} | ${2} | ${3}
  ${2} | ${1} | ${3}
`('$a + $b', ({a, b, expected}) => {
  test(`returns ${expected}`, () => {
    expect(a + b).toBe(expected);
  });

  test(`returned value not be greater than ${expected}`, () => {
    expect(a + b).not.toBeGreaterThan(expected);
  });

  test(`returned value not be less than ${expected}`, () => {
    expect(a + b).not.toBeLessThan(expected);
  });
});
Zur Übersicht

Mehr vom Devsquad...

Umut Tufanoglu

SVG as Favicon

Sophia Brandt

entr - Event Notify Test Runner