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

Menguji REST API menggunakan Jest dan Supertest ✅

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-28 20:36:11459semak imbas

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

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

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;
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.

Mencipta fail ujian

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

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

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

Ujian Larian

Jalankan ujian menggunakan arahan berikut:

npm run test

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!

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