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

Testen von REST-APIs mit Jest und Supertest ✅

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-28 20:36:11467Durchsuche

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
npm install -D jest supertest

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

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;
const app = require("./app");
const port = 3000;

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

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

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",
 });

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

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

Lauftest

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

npm run test

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!

Stellungnahme:
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