asal diterbitkan: souvikinator.xyz
Berikut ialah cara untuk menyediakan ujian unit untuk titik akhir API.
Kami akan menggunakan pakej NPM berikut:
Pelanjutan Kod VS menggunakan:
npm install express
npm install -D jest supertest
Berikut ialah rupa struktur direktori:
dan jangan lupa 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" } }
Pelayan ekspres yang menerima permintaan POST dengan isi dan tajuk pada titik akhir /post. Jika salah satu tiada, status 400 Bad Request dikembalikan.
// 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} ?`); });
Apl ekspres dieksport untuk digunakan dengan supertest. Perkara yang sama boleh dilakukan dengan rangka kerja pelayan HTTP yang lain.
// api.test.js const supertest = require("supertest"); const app = require("./app"); // express app describe("Creating post", () => { // test cases goes here });
Supertest menguruskan menjalankan pelayan dan membuat permintaan untuk kami, sementara kami menumpukan pada ujian.
Apl ekspres diserahkan kepada ejen terunggul dan ia mengikat ekspres ke port yang tersedia secara rawak. Kemudian kami boleh membuat permintaan HTTP ke titik akhir API yang dikehendaki dan membandingkan status responsnya dengan jangkaan kami:
const response = await supertest.agent(app).post("/post").send({ title: "Awesome post", body: "Awesome post body", });
Kami akan membuat ujian untuk 3 kes:
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); });
dan kod akhir sepatutnya kelihatan seperti:
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); }); });
Jalankan ujian menggunakan arahan berikut:
npm run test
Jika menggunakan sambungan Kod VS seperti jest dan jest runner maka ia akan membantu anda.
Dan inilah cara kami boleh menguji titik akhir API dengan mudah. ?
Atas ialah kandungan terperinci Menguji REST API menggunakan Jest dan Supertest ✅. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!