Testeando una API de Express.js con Vitest

• Erick Medel Galindo

Paso 1: Configuración de Express

Iniciar el repositorio

Crea un nuevo directorio para tu proyecto y navega dentro de él:

mkdir my-express-app && cd my-express-app

Luego, inicializa un nuevo proyecto de Node.js:

npm init -y

A continuación, instala las dependencias:

npm install express vitest @vitest/ui supertest dotenv

Crear archivos de la API

Crea un nuevo archivo y agrega nuestras rutas para poder exportarlas, iniciar el servidor con esas rutas y también poder probarlas:

touch root.js

Agrega:

import express from "express";
const app = express();

app.get("/api/products", (req, res) => {
  res.status(200).json([
    {
      id: 1,
      name: "iPhone",
    },
    {
      id: 2,
      name: "MacBook Pro",
    },
  ]);
});

export { app };

Crea el archivo que inicializará el servidor, podemos ejecutarlo con el comando "node app.js":

touch app.js
import { app } from "./root.js";

import dotenv from "dotenv";

dotenv.config();
const port = process.env.PORT || 3000;

app.listen(port, () => {
  console.log(`⚡ Server listening on port \x1b[33m${port}\x1b[37m`);
});

Actualiza el archivo package.json para poder usar módulos ECMAScript. Tu archivo debería verse así:

{
  "name": "my-express-app",
  "version": "1.0.0",
  "type": "module",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@vitest/ui": "^1.4.0",
    "dotenv": "^16.4.5",
    "express": "^4.19.1",
    "supertest": "^6.3.4",
    "vitest": "^1.4.0"
  }
}

Ahora puedes probar tu API usando el siguiente comando!

node app.js

Paso 2: Configuración de Vitest

Crear archivos de prueba

Crea el archivo que será leído por vitest y escribe la prueba:

touch index.test.js

Agrega:

import { test, beforeEach, afterEach } from "vitest";
import { app } from "./root.js";

import request from "supertest";

let server;

beforeEach(() => {
  server = app.listen();
});

afterEach(() => {
  server.close();
});

test("GET /api/products", async ({ expect }) => {
  const response = await request(server).get("/api/products");

  expect(response.statusCode).toBe(200);
  server.close();
});

Paso 3: ¡Prueba tu API!

Para ejecutar las pruebas, simplemente ejecuta el siguiente comando:

npx vitest

¡Lo lograste!

npx vitest

Puedes hacer este proceso más fácil modificando los scripts de package.json de la siguiente manera:

"scripts": {
  "test": "vitest"
},

¿Te gusta mi contenido? ¡Invítame un café! ☕

Buy Me a Coffee