Heim > Web-Frontend > js-Tutorial > Testen von REST-APIs mit Jest und Supertest ✅

Testen von REST-APIs mit Jest und Supertest ✅

Mary-Kate Olsen
Freigeben: 2024-12-28 20:36:11
Original
480 Leute haben es durchsucht

ursprünglich veröffentlicht: souvikinator.xyz

Hier erfahren Sie, wie Sie Unit-Tests für API-Endpunkte einrichten.

Wir werden die folgenden NPM-Pakete verwenden:

  • Express für den Server (jedes andere Framework kann verwendet werden)
  • Scherz
  • Supertest

VS-Code-Erweiterung mit:

  • Scherz
  • Jest Runner

Abhängigkeiten installieren

npm install express
Nach dem Login kopieren
npm install -D jest supertest
Nach dem Login kopieren

So sieht die Verzeichnisstruktur aus:

Testing REST APIs using Jest and Supertest ✅

und vergessen wir nicht package.json

{
  "name": "api-unit-testing",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "jest api.test.js",
    "start":"node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.1"
  },
  "devDependencies": {
    "jest": "^28.1.2",
    "supertest": "^6.2.3"
  }
}
Nach dem Login kopieren

Erstellen eines einfachen Express-Servers

Ein Express-Server, der POST-Anfragen mit einem Text und einem Titel auf dem /post-Endpunkt akzeptiert. Wenn einer von beiden fehlt, wird der Status 400 Bad Request zurückgegeben.

// app.js
const express = require("express");
const app = express();

app.use(express.json());

app.post("/post", (req, res) => {
  const { title, body } = req.body;

  if (!title || !body)
    return res.sendStatus(400).json({ error: "title and body is required" });

  return res.sendStatus(200);
});

module.exports = app;
Nach dem Login kopieren
const app = require("./app");
const port = 3000;

app.listen(port, () => {
  console.log(`http://localhost:${port} ?`);
});
Nach dem Login kopieren

Die Express-App wird zur Verwendung mit Supertest exportiert. Dasselbe kann mit anderen HTTP-Server-Frameworks durchgeführt werden.

Testdatei erstellen

// api.test.js
const supertest = require("supertest");
const app = require("./app"); // express app

describe("Creating post", () => {
    // test cases goes here
});
Nach dem Login kopieren

Supertest kümmert sich für uns um den Betrieb des Servers und das Stellen von Anfragen, während wir uns auf das Testen konzentrieren.

Die Express-App wird an den Supertest-Agenten übergeben und bindet Express an einen zufällig verfügbaren Port. Dann können wir eine HTTP-Anfrage an den gewünschten API-Endpunkt stellen und seinen Antwortstatus mit unserer Erwartung vergleichen:

 const response = await supertest.agent(app).post("/post").send({
        title: "Awesome post",
    body: "Awesome post body",
 });
Nach dem Login kopieren

Wir erstellen einen Test für drei Fälle:

  1. Wenn sowohl Titel als auch Text angegeben werden
  test("creating new post when both title and body are provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
      body: "Awesome post body",
    });

        // comparing response status code with expected status code
    expect(response.statusCode).toBe(200);
  });
Nach dem Login kopieren
  1. Wenn einer von beiden fehlt
  test("creating new post when either of the data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
    });

    expect(response.statusCode).toBe(400);
  });
Nach dem Login kopieren
  1. Wenn beide fehlen
  test("creating new post when no data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send();

    expect(response.statusCode).toBe(400);
  });
Nach dem Login kopieren

und der endgültige Code sollte wie folgt aussehen:

const supertest = require("supertest");
const app = require("./app"); // express app

describe("Creating post", () => {

  test("creating new post when both title and body are provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
      body: "Awesome post body",
    });
    expect(response.statusCode).toBe(200);
  });

  test("creating new post when either of the data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send({
      title: "Awesome post",
    });
    expect(response.statusCode).toBe(400);
  });

  test("creating new post when no data is not provided", async () => {
    const response = await supertest.agent(app).post("/post").send();
    expect(response.statusCode).toBe(400);
  });
});
Nach dem Login kopieren

Lauftest

Führen Sie den Test mit dem folgenden Befehl aus:

npm run test
Nach dem Login kopieren

Testing REST APIs using Jest and Supertest ✅

Wenn Sie VS-Code-Erweiterungen wie Jest und Jest Runner verwenden, erledigt es die Arbeit für Sie.

Testing REST APIs using Jest and Supertest ✅

Und so können wir API-Endpunkte einfach testen. ?

Testing REST APIs using Jest and Supertest ✅

Das obige ist der detaillierte Inhalt vonTesten von REST-APIs mit Jest und Supertest ✅. 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