Maison >interface Web >js tutoriel >Tester les API REST à l'aide de Jest et Supertest ✅

Tester les API REST à l'aide de Jest et Supertest ✅

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-28 20:36:11460parcourir

publié initialement : souvikinator.xyz

Voici comment configurer des tests unitaires pour les points de terminaison de l'API.

Nous utiliserons les packages NPM suivants :

  • Express pour le serveur (tout autre framework peut être utilisé)
  • Blague
  • Supertest

Extension VS Code utilisant :

  • Blague
  • Jest Runner

Installation des dépendances

npm install express
npm install -D jest supertest

Voici à quoi ressemble la structure des répertoires :

Testing REST APIs using Jest and Supertest ✅

et n'oublions pas 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"
  }
}

Création d'un serveur express simple

Un serveur express qui accepte les requêtes POST avec un corps et un titre sur le point de terminaison /post. Si l'un ou l'autre est manquant, le statut 400 Bad Request est renvoyé.

// 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} ?`);
});

L'application express est exportée pour être utilisée avec supertest. La même chose peut être faite avec d'autres frameworks de serveurs HTTP.

Création d'un fichier de test

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

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

Supertest s'occupe de faire fonctionner le serveur et de faire des requêtes pour nous, pendant que nous nous concentrons sur les tests.

L'application express est transmise à l'agent supertest et elle lie express à un port disponible aléatoire. Ensuite, nous pouvons faire une requête HTTP au point de terminaison de l'API souhaité et comparer son état de réponse avec nos attentes :

 const response = await supertest.agent(app).post("/post").send({
        title: "Awesome post",
    body: "Awesome post body",
 });

Nous allons créer un test pour 3 cas :

  1. Lorsque le titre et le corps sont fournis
  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. Quand l'un d'eux est porté disparu
  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. Quand ils manquent tous les deux
  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);
  });

et le code final devrait ressembler à :

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

Test en cours

Exécutez le test à l'aide de la commande suivante :

npm run test

Testing REST APIs using Jest and Supertest ✅

Si vous utilisez des extensions VS Code comme jest et jest runner, il fera le travail à votre place.

Testing REST APIs using Jest and Supertest ✅

Et c'est ainsi que nous pouvons facilement tester les points de terminaison de l'API. ?

Testing REST APIs using Jest and Supertest ✅

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn