Heim >Web-Frontend >js-Tutorial >Testen von REST-APIs mit Jest und Supertest ✅
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:
VS-Code-Erweiterung mit:
npm install express
npm install -D jest supertest
So sieht die Verzeichnisstruktur aus:
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" } }
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.
// 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:
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); });
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); });
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); }); });
Führen Sie den Test mit dem folgenden Befehl aus:
npm run test
Wenn Sie VS-Code-Erweiterungen wie Jest und Jest Runner verwenden, erledigt es die Arbeit für Sie.
Und so können wir API-Endpunkte einfach testen. ?
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!