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
Libérer: 2024-12-28 20:36:11
original
520 Les gens l'ont consulté

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
Copier après la connexion
npm install -D jest supertest
Copier après la connexion

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"
  }
}
Copier après la connexion

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;
Copier après la connexion
const app = require("./app");
const port = 3000;

app.listen(port, () => {
  console.log(`http://localhost:${port} ?`);
});
Copier après la connexion

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
});
Copier après la connexion

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",
 });
Copier après la connexion

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);
  });
Copier après la connexion
  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);
  });
Copier après la connexion
  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);
  });
Copier après la connexion

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);
  });
});
Copier après la connexion

Test en cours

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

npm run test
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal