Rumah > hujung hadapan web > tutorial js > Menguji REST API menggunakan Jest dan Supertest ✅

Menguji REST API menggunakan Jest dan Supertest ✅

Mary-Kate Olsen
Lepaskan: 2024-12-28 20:36:11
asal
467 orang telah melayarinya

asal diterbitkan: souvikinator.xyz

Berikut ialah cara untuk menyediakan ujian unit untuk titik akhir API.

Kami akan menggunakan pakej NPM berikut:

  • Ekspres untuk pelayan (sebarang rangka kerja lain boleh digunakan)
  • gurauan
  • Terbaik

Pelanjutan Kod VS menggunakan:

  • gurauan
  • Jest Pelari

Memasang kebergantungan

npm install express
Salin selepas log masuk
npm install -D jest supertest
Salin selepas log masuk

Berikut ialah rupa struktur direktori:

Testing REST APIs using Jest and Supertest ✅

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"
  }
}
Salin selepas log masuk

Mencipta pelayan ekspres mudah

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

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

Apl ekspres dieksport untuk digunakan dengan supertest. Perkara yang sama boleh dilakukan dengan rangka kerja pelayan HTTP yang lain.

Mencipta fail ujian

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

describe("Creating post", () => {
    // test cases goes here
});
Salin selepas log masuk

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",
 });
Salin selepas log masuk

Kami akan membuat ujian untuk 3 kes:

  1. Apabila kedua-dua tajuk dan badan disediakan
  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);
  });
Salin selepas log masuk
  1. Apabila salah satu daripada mereka hilang
  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);
  });
Salin selepas log masuk
  1. Apabila kedua-duanya tiada
  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);
  });
Salin selepas log masuk

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);
  });
});
Salin selepas log masuk

Ujian Larian

Jalankan ujian menggunakan arahan berikut:

npm run test
Salin selepas log masuk

Testing REST APIs using Jest and Supertest ✅

Jika menggunakan sambungan Kod VS seperti jest dan jest runner maka ia akan membantu anda.

Testing REST APIs using Jest and Supertest ✅

Dan inilah cara kami boleh menguji titik akhir API dengan mudah. ?

Testing REST APIs using Jest and Supertest ✅

Atas ialah kandungan terperinci Menguji REST API menggunakan Jest dan Supertest ✅. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan