Schreibtisch mit Laptop und Moodboards
Dennis, Kiya | 25.01.2024

Table-Driven Testing mit Jest: Eine Einführung

Webentwicklung > Table-Driven Testing mit Jest: Eine Einführung

Die Durchführung von Tests für ähnliche Szenarien kann oft zu einer ermüdenden Wiederholung von Code führen. Hier bieten table-driven (auf Deutsch "tabellengesteuerte") Tests eine effiziente Lösung. Diese Testmethode wurde entwickelt, um die Wiederholung von Code zu minimieren, indem eine Reihe von Tests auf einer Datenbasis erstellt wird.

Die Methode describe.each von Jest ist ein nützliches Werkzeug, das die Erstellung von Testsuiten ermöglicht, die unterschiedliche Daten verwenden, aber dieselbe Funktionalität überprüfen.

Es gibt zwei Hauptansätze für den Syntax, der hier verwendet werden kann:

Zum einen ist es möglich, eine Datentabelle als Array zu konstruieren, in der mit String-Interpolation gearbeitet wird. Die Jest-Dokumentation bietet hierfür ein anschauliches Beispiel.

Eine Alternative und oft als eleganter angesehene Methode ist die Verwendung eines Arrays von Objekten als Testtabelle. Jedes Objekt repräsentiert Eingabewerte und das erwartete Ergebnis.

Ein Beispiel würde wie folgt aussehen:

1describe.each([
2  {a: 1, b: 1, expected: 2},
3  {a: 1, b: 2, expected: 3},
4  {a: 2, b: 1, expected: 3},
5])('.add($a, $b)', ({a, b, expected}) => {
6  test(`returns ${expected}`, () => {
7    expect(a + b).toBe(expected);
8  });
9
10  test(`does not return more than ${expected}`, () => {
11    expect(a + b).not.toBeGreaterThan(expected);
12  });
13
14  test(`does not return less than ${expected}`, () => {
15    expect(a + b).not.toBeLessThan(expected);
16  });
17});

Darüber hinaus können sogenannte "Tagged template literals" verwendet werden, um Testspezifikationen klarer zu gestalten.

Ein Beispiel wäre:

1describe.each`
2  a    | b    | expected
3  ${1} | ${1} | ${2}
4  ${1} | ${2} | ${3}
5  ${2} | ${1} | ${3}
6`('$a + $b', ({a, b, expected}) => {
7  test(`returns ${expected}`, () => {
8    expect(a + b).toBe(expected);
9  });
10
11  test(`does not return more than ${expected}`, () => {
12    expect(a + b).not.toBeGreaterThan(expected);
13  });
14
15  test(`does not return less than ${expected}`, () => {
16    expect(a + b).not.toBeLessThan(expected);
17  });
18});

Diese Beispiele zeigen, wie Jest table-driven Tests ermöglicht, um die Erstellung von kompakten und dynamischen Testsuiten zu vereinfachen.

Inhalt
  • Was ist "table-driven Testing" mit Jest?
  • Welcher Syntaxansatz kann für table-driven Tests verwendet werden?
  • Wie konstruiert man eine Datentabelle als Array zum Testen?
  • Wie verwendet man ein Array von Objekten für das Testen?
  • Was sind getaggte Vorlagenliterale und wie können sie für tabellenbasiertes Testen verwendet werden?
Dennis Hundertmark
Dennis (Softwareentwickler)

Als Frontend-Experte und Angular-Enthusiast gestalte ich Webanwendungen, die Technik und Design gekonnt zusammenführen. Meine Stärke liegt in der Entwicklung benutzerzentrierter Lösungen, die sowohl f... mehr anzeigen

Gitlab
Gesicht von Kiya,- unsere KI Mitarbeiterin
Kiya

... ist unsere engagierte und leidenschaftliche Künstliche Intelligenz und Expertin für Softwareentwicklung. Mit einem unermüdlichen Interesse für technologische Innovationen bringt sie Enthusiasmus u... mehr anzeigen

More about this topic

More from Dennis

Unsere Entwicklungsexpertise

Standort Hannover

newcubator GmbH
Bödekerstraße 22
30161 Hannover

Standort Dortmund

newcubator GmbH
Westenhellweg 85-89
44137 Dortmund