Heim > Web-Frontend > js-Tutorial > So verwenden Sie Node.js Test Runner: Eine detaillierte Anleitung

So verwenden Sie Node.js Test Runner: Eine detaillierte Anleitung

Patricia Arquette
Freigeben: 2025-01-17 18:31:11
Original
595 Leute haben es durchsucht

Der JavaScript-Testläufer oder Node.js-Testläufer hilft bei der Automatisierung des Testprozesses für Websites und Webanwendungen, indem er eine Reihe von Testtechniken ermöglicht, darunter Unit-, Integrations- und End-to-End-Tests.

Der Node.js-Testläufer automatisiert die Ausführung von Tests und bietet Feedback zu den Ergebnissen, um Fehler in den Phasen der Softwareentwicklung effektiv zu identifizieren und zu beheben.

In diesem Blog schauen wir uns an, wie Sie den Node.js-Testläufer für automatisierte Tests nutzen können, während wir neben Test-Hooks auch Methoden wie Mocking und paralleles Testen erkunden.

Was ist Node.js Test Runner?

Programmiersprachen wie Python, Ruby und Go verfügten über einen integrierten Testläufer, JavaScript jedoch nicht. Alle Testläufer im JavaScript-Ökosystem, wie Mocha, Jest und Jasmine, wurden als Pakete von Drittanbietern erstellt.

All dies änderte sich, als Node.js einen experimentellen integrierten Testläufer in Node.js Version 18 veröffentlichte und den Testläufer in Node.js Version 20 stabil machte.

Der Testläufer bietet mehrere Funktionen, wie zum Beispiel:

  • Assertion-Bibliothek

  • Testhaken

  • Mocking-Funktionalität

  • Codeabdeckung

  • Testreporter

  • Asynchrones Testen

Warum Node.js Test Runner verwenden?

Der native Testläufer in Node.js bietet mehrere Vorteile für JavaScript-Automatisierungstests. Im Folgenden sind einige der Vorteile der Verwendung dieses Testläufers aufgeführt:

  • Der Test Runner optimiert den Testprozess für Entwickler und Tester, indem er Zeit bei der Entscheidung, welches Tool verwendet werden soll, spart, da er in Node.js selbst integriert ist.

  • Die integrierte Assertionsbibliothek im Node.js-Testläufer vereinfacht das Schreiben von Tests und das Erhalten von Testergebnissen, ohne dass andere Assertionsbibliotheken installiert werden müssen.

  • Der Test Runner enthält eine Funktion zur Codeabdeckung, um sicherzustellen, dass alle Abschnitte des Codes getestet werden, indem die Teile identifiziert werden, die noch nicht getestet wurden.

  • Der native Testläufer verfügt über eine Funktion namens Überwachungsmodus, mit der er Änderungen in Testdateien und deren Abhängigkeiten überwachen kann. Wenn Änderungen erkannt werden, führt der Testläufer die von der Änderung betroffenen Tests automatisch erneut aus.

  • Testen mit Node.js ermöglicht die Verwendung von Mocks, Stubs und Spys, die für das Testen einzelner Komponenten isoliert von der gesamten Software wichtig sind.

Wie fange ich mit Node.js Test Runner an?

In diesem Teil des Blogbeitrags erfahren Sie, wie Sie mit der Verwendung des integrierten Testläufers von Node.js beginnen und Ihr Testskript erfolgreich ausführen.

Befolgen Sie zunächst diese Anweisungen;

  1. Stellen Sie sicher, dass Sie Node.js Version 20 oder höher verwenden, da der Testläufer seit der Veröffentlichung von Version 20 vollständig in den Kern von Node.js integriert ist.

  2. Erstellen Sie ein TestRunner-Verzeichnis und starten Sie es mit Ihrer integrierten Entwicklungsumgebung (IDE). In diesem Szenario haben wir beispielsweise VS-Code verwendet.

Führen Sie den folgenden Befehl im Terminal aus, um ein Node.js-Projekt einzurichten:

    npm init -y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstellen Sie zwei neue Ordner mit den Namen „src“ und „tests“ im TestRunner-Verzeichnis.

Aktualisieren Sie das Testskript in Ihrer package.json-Datei mit dem folgenden Codeausschnitt:

    "scripts": {
        "test": "node --test TestRunner/tests/"
      },
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Installieren Sie Selenium WebDriver, indem Sie den folgenden Befehl ausführen:

    npm install selenium-webdriver
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren


`

Führen Sie den unten angegebenen Befehl aus, um ChromeDriver zu installieren:


npm chromedriver installieren

Erstellen Sie eine neue Datei „started.test.js“ im Testordner. Fügen Sie dann den folgenden Code zur Datei hinzu:

`
const { Builder, By, Key, Until } = require("selenium-webdriver");
const affirm = require("assert").strict;
const { test } = require("node:test");

{
  let driver;


  test("Setup WebDriver for Google Search Test Suite", async (t) => {
    driver = await new Builder().forBrowser("chrome").build();
  });


  test("Navigate to Google and verify title", async (t) => {
    await driver.get("http://www.google.com");
    const title = await driver.getTitle();
    assert.strictEqual(title, "Google");
  });


  test("Cleanup after Google Search Test Suite", async (t) => {
    await driver.quit();
  });
}
Nach dem Login kopieren
Nach dem Login kopieren

`

So verwenden Sie Node.js Test Runner: Eine detaillierte Anleitung

Der obige Code importiert die erforderlichen Funktionen aus node:test und node:assert und beschreibt einen einfachen Test, der zu Google navigiert und den Titel überprüft.

Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/started.test.js

Verwendung der Blöcke „beschreiben()“ und „it()“.

Im Node.js Test Runner können Sie die Blöcke describe() und it() verwenden, um Tests auszuführen. Der describe()-Block wird verwendet, um eine Suite zu deklarieren, die zusammengehörige Tests organisiert und gruppiert, während der it()-Block verwendet wird, um einen Test zu deklarieren.

Der Vorteil der Verwendung von describe()/it()-Blöcken besteht darin, dass sie eine Möglichkeit bieten, Ihre Tests in Blöcke mit verwandten Funktionen oder Merkmalen zu organisieren. Dies ist nützlich für größere Testsuiten, in denen Sie die Tests übersichtlich und logisch gruppieren möchten.

In einem describe()-Block können Sie mehrere test()- oder it()-Blöcke haben, die bestimmte Testfälle definieren. Sie können describe()-Blöcke auch ineinander verschachteln, um Untergruppen von Tests für eine detailliertere Organisation zu erstellen.

Sie können Tests mit den Blöcken describe() und it() schreiben, wie unten gezeigt.

Erstellen Sie eine Datei „describeit.test.js“ im Testverzeichnis und fügen Sie das bereitgestellte Code-Snippet unten ein:

`
beschreiben("Form Input Test", async () => {
Fahrer lassen;

  await it("Setup WebDriver", async () => {
    driver = await new Builder().forBrowser("chrome").build();
  });


  await it("should input values in a form and check their sum", async () => {
    await driver.get("https://www.lambdatest.com/selenium-playground/simple-form-demo");


    await driver.findElement(By.id("sum1")).sendKeys(2);
    await driver.findElement(By.id("sum2")).sendKeys(3);
    await driver.findElement(By.xpath("//button[normalize-space()='Get Sum']")).click();


    let sum = await driver.wait(until.elementLocated(By.id("addmessage")),10000);
    let sumNo = await sum.getText();
    assert.strictEqual(sumNo, "5");
  });


  await it("Cleanup: Close the browser", async () => {
    await driver.quit();
  });
});
Nach dem Login kopieren

`

Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/describeit.test.js

Tests überspringen

Mit dem Node.js-Testläufer können Sie auch Tests überspringen. Sie können Tests überspringen, wenn sie fehlerhaft sind, die getestete Funktion sich in der aktiven Entwicklung befindet, der Test von nicht verfügbaren externen Abhängigkeiten abhängt oder Tests veraltete Funktionen betreffen.

Einzelne Tests können übersprungen werden, indem die Skip-Option an den Test übergeben oder die Annotation skip() des Testkontexts aufgerufen wird. Anmerkungen, um die Ausführung des Tests im integrierten Test-Runner zu vermeiden, bestehen aus Indikatoren wie skip:true, skip;'Dieser Test wird übersprungen', t.skip( ) und t.skip(„Dieser Test wird übersprungen“) wie hier dargestellt Beispiel.

  1. Erstellen Sie eine „skipping.test.js“-Datei im Verzeichnis „Tests“ und fügen Sie den unten bereitgestellten Codeausschnitt ein.

`
beschreiben("Erwartete Werte müssen strikt gleich sein", async () => {
Fahrer lassen;
Driver = wait new Builder().forBrowser("chrome").build();
it("sollte strikt gleich sein", async () => {
Warten Sie auf drivers.get("http://www.google.com");
const title = Warten auf drivers.getTitle();
behaupten.strictEqual(title, "Google");
});

    npm init -y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

`

  1. Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/skipping.test.js

Verwendung von Test-Hooks

Der Node.js-Testläufer bietet verschiedene Test-Hooks. Hooks sind Funktionen, die unmittelbar vor oder unmittelbar nach einem Test ausgeführt werden. Die im Node.js-Testläufer verfügbaren Hooks sind before(), beforeEach(), after() und afterEach().

Hier sind einige Beispiele für die Verwendung dieser Haken:

**before() *Hook*

Der before()-Hook wird verwendet, um die Testumgebung vorzubereiten, in der er einmal vor allen Tests in einem describe-Block ausgeführt wird. Sie können beispielsweise den Hook before() verwenden, um den WebDriver einzurichten, bevor alle Ihre Tests ausgeführt werden.

Im Folgenden erfahren Sie, wie Sie den Hook before() verwenden:

  1. Erstellen Sie eine Datei „beforehook.test.js“ im Testverzeichnis und fügen Sie das bereitgestellte Code-Snippet unten ein:

`
beschreiben("Simple Form Demo Title Test", async () => {
Fahrer lassen;

    "scripts": {
        "test": "node --test TestRunner/tests/"
      },
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

`

  1. Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/beforehook.test.js

**beforeEach() *Hook*

Der Hook beforeEach() wird einmal vor jedem Test ausgeführt und dient dazu, Tests zu isolieren, damit sie sich nicht gegenseitig beeinflussen. Wenn Sie beispielsweise für einige Tests eine bestimmte Seiten-URL besuchen müssen, können Sie einen beforeEach()-Hook verwenden, um die URL-Seite vor der Ausführung jedes Tests zu öffnen.

Im Folgenden erfahren Sie, wie Sie den Hook beforeEach() verwenden:

  1. Erstellen Sie eine Datei beforeEachhook.test.js im Testverzeichnis und fügen Sie das bereitgestellte Code-Snippet unten ein:

`
beschreiben("Simple Form Demo Test", async () => {
Fahrer lassen;

    npm install selenium-webdriver
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

`

  1. Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/beforeEachhook.test.js

**after() *Hook*

Der Hook after() wird einmal nach der Ausführung aller Tests ausgeführt und dient zur Durchführung von Bereinigungsaktionen nach der Ausführung aller Tests. Wenn Sie beispielsweise den WebDriver schließen möchten, nachdem die Tests ausgeführt wurden, können Sie den Hook after() verwenden.

Im Folgenden erfahren Sie, wie Sie den Hook after() verwenden:

  1. Erstellen Sie eine Datei „afterhook.test.js“ im Testverzeichnis und fügen Sie das bereitgestellte Code-Snippet unten ein:

`
beschreiben("Simple Form Demo Test", async () => {
Fahrer lassen;

    npm init -y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

`

  1. Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/afterhook.test.js

**afterEach() *Hook*

Der Hook afterEach() wird einmal nach jedem Test ausgeführt. Es wird verwendet, um nach jedem Test Bereinigungsaktionen durchzuführen. Wenn Sie beispielsweise Cookies nach jedem Test löschen möchten, können Sie einen afterEach()-Hook verwenden.

Erstellen Sie eine Datei „afterEachhook.test.js“ im Testverzeichnis und fügen Sie das bereitgestellte Code-Snippet unten ein:

`
const { Builder, By, Key, Until } = require("selenium-webdriver");
const affirm = require("assert").strict;
const {
beschreiben,
es,
vorher,
beforeEach,
danach,
afterEach,
} = require("node:test");

    "scripts": {
        "test": "node --test TestRunner/tests/"
      },
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

`

Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/afterEachhook.test.js

Mocks implementieren

Mit der integrierten Mocking-Funktionalität des Node.js-Testläufers können Sie Funktionen in Testsituationen, in denen externe Abhängigkeiten oder Pakete von Drittanbietern verwendet werden, verspotten und ersetzen. Dies ist besonders praktisch, wenn sich diese Abhängigkeiten noch in der Entwicklungsphase befinden.

Mit der Mocking-Funktionalität können Sie Spione und Stubs erstellen. Unten finden Sie ein Beispiel, das die Verwendung von Mocking-Funktionen zur Validierung des Abrufens von Daten von einer API veranschaulicht:

Installieren Sie zunächst axios, einen Promise-basierten HTTP-Client für den Browser und Node.js, mit dem unten angegebenen Befehl:


npm install axios

Erstellen Sie dann eine index.js-Datei und fügen Sie den folgenden Code hinzu:

`
const axios = require("axios");

    npm install selenium-webdriver
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

`

Der obige Code implementiert eine MakeRequest-Klasse, die drei Funktionen hat: fetchDataFromAPI(), slugifyTitle() und addToDB().

Erstellen Sie dann eine Datei „mock.test.js“ und fügen Sie den folgenden Code hinzu:

`
// Beschreibung der Tests im Zusammenhang mit Spott
beschreiben("Mocking Tests", async () => {
// Mocks vor jedem Test zurücksetzen
beforeEach(() => mock.restoreAll());

{
  let driver;


  test("Setup WebDriver for Google Search Test Suite", async (t) => {
    driver = await new Builder().forBrowser("chrome").build();
  });


  test("Navigate to Google and verify title", async (t) => {
    await driver.get("http://www.google.com");
    const title = await driver.getTitle();
    assert.strictEqual(title, "Google");
  });


  test("Cleanup after Google Search Test Suite", async (t) => {
    await driver.quit();
  });
}
Nach dem Login kopieren
Nach dem Login kopieren

`

Im obigen Code wird die Methode fetchDataFromAPI aus der Klasse MakeRequest gemobbt.

Um zu verhindern, dass die Funktion eine Netzwerkanfrage stellt, wird die Methode mockImplementation() verwendet, um eine vordefinierte Ausgabe zurückzugeben, die auf bestimmte Werte getestet werden kann.

Schließlich wird mock.method() verwendet, um einen Spion zu erstellen, um zu testen, ob die Funktion slugifyTitle() aufgerufen wird. Außerdem wird anhand des Titels geprüft, wie oft die Funktion aufgerufen und ihre Ausgabe getestet wird.

Führen Sie die Tests mit dem unten angegebenen Befehl aus:


Knotentests/mock.test.js

Parallele Tests ausführen

Node.js Test Runner ermöglicht es Ihnen, mehrere Tests parallel und gleichzeitig auszuführen, anstatt sie nacheinander auszuführen.

Um Tests parallel in Node.js Test Runner auszuführen, müssen Sie den Parameter concurrency: true als zweites Argument an die Funktion describe() übergeben.

Unten finden Sie ein Beispiel für die parallele Ausführung von Tests mit dem nativen Testläufer von Node.js und Selenium unter Verwendung von Parallelitätsparametern.

Erstellen Sie eine parallel.test.js-Datei im Testordner und fügen Sie den folgenden Code hinzu:

`
beschreiben("E-Commerce-Site-Tests", { concurrency: true }, async () => {
Fahrer lassen;

    npm init -y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

`

Führen Sie den unten angegebenen Befehl aus, um den Test auszuführen:


Knotentests/parallel.test.js

Die oben genannten Testausführungen werden im lokalen Netz durchgeführt. Um Ihre Automatisierungstests mit Node.js zu skalieren, können Sie jedoch die Verwendung eines cloudbasierten Testansatzes in Betracht ziehen.

KI-gesteuerte Testausführungsplattformen wie LambdaTest ermöglichen es Ihnen, Node.js-Tests auf einer skalierbaren Automatisierungs-Cloud-Infrastruktur auszuführen und so Kompatibilität und Zuverlässigkeit sicherzustellen.

Abschluss

Zusammenfassend bietet der Node.js-Testläufer eine leichtgewichtige Lösung zum Erstellen und Ausführen automatisierter Tests in Ihren Webprojekten. Obwohl es möglicherweise nicht alle Funktionen gängiger Test-Frameworks enthält, ist es aufgrund seiner Unkompliziertheit und Benutzerfreundlichkeit eine hervorragende Option für den Beginn automatisierter Tests.

In diesem Blog werden die Funktionen des in Node.js integrierten Testläufers erläutert. Es behandelt das Erstellen von Tests mit der Funktion describe() und ihrer Syntax unter Verwendung von Hooks für Setup- und Teardown-Vorgänge sowie das gleichzeitige Verspotten und Ausführen von Tests in parallelen Threads zur Qualitätssicherung und Stabilität des JavaScript-Codes Verbesserungszwecke.

Für komplexe Testsituationen möchten Sie möglicherweise den Standard-Testläufer mit gängigen Frameworks wie Mocha, Jasmine oder Jest vergleichen, um festzustellen, welches Ihren Anforderungen am besten entspricht.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Node.js Test Runner: Eine detaillierte Anleitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage