Atualizado: 21/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Testando Rotas HTTP em Aplicações Express com Supertest em Node.js

Para garantir a funcionalidade correta das rotas HTTP em aplicações que utilizam o framework Express, podemos utilizar a ferramenta de testes SuperTest. Neste tema, vamos aprender como configurar e executar testes básicos e avançados para rotas HTTP em uma aplicação Express.

Primeiro, instalamos o supertest com o comando:

npm install supertest --save-dev

Em seguida, definimos um arquivo simples de aplicação chamado app.js:

const express = require("express");
const app = express();

app.get("/", function (request, response) {
  response.send("Hello Test");
});

module.exports.app = app;

Esta aplicação, ao ser acessada pela rota principal /, envia em resposta a string "Hello Test".

Para usar essa aplicação no teste, ela é exportada como um módulo: module.exports.app = app.

Depois, criamos um novo arquivo app.test.js no diretório do projeto para os testes:

const request = require("supertest");
const { app } = require("./app");

it("should return Hello Test", function (done) {
  request(app).get("/").expect("Hello Test").end(done);
});

Para testar, importamos os módulos supertest e nossa aplicação e usamos o método it() para verificar o resultado.

Para configurar e executar o teste, passamos a aplicação ao request:

request(app);

Definimos a rota que será acessada na aplicação:

get("/");

Definimos o resultado esperado com o método expect:

expect("Hello Test");

E, com o método end(), encerramos o teste:

end(done);

Para executar este teste, devemos configurar adequadamente o comando test no arquivo package.json:

{
  "name": "testapp",
  "version": "1.0.0",
  "scripts": {
    "test": "mocha *.test.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "mocha": "^10.2.0",
    "supertest": "^6.3.3"
  }
}

Vamos executar o teste:

c:\app> npm test

> testapp@1.0.0 test
> mocha *.test.js

✔ should return Hello Test

1 passing (23ms)

Se o teste passar, veremos uma mensagem de sucesso. Caso contrário, veremos uma mensagem de erro com detalhes sobre o problema.

Vamos criar mais alguns testes. Para isso, alteramos o arquivo app.js da seguinte forma:

const express = require("express");
const app = express();

app.get("/", function (request, response) {
  response.send("Hello Test");
});

app.get("/error", function (request, response) {
  response.status(404).send("NotFound");
});

app.get("/user", function (request, response) {
  response.send({ name: "Tom", age: 22 });
});

module.exports.app = app;

Aqui, definimos o tratamento para três rotas. Para testá-las, modificamos o arquivo app.test.js:

const request = require("supertest");
const assert = require("assert");
const { app } = require("./app");

it("should return Hello Test", function (done) {
  request(app).get("/").expect("Hello Test").end(done);
});

it("should return NotFound with status 404", function (done) {
  request(app).get("/error").expect(404).expect("NotFound").end(done);
});

it("should return user with name Tom and age 22", function (done) {
  request(app)
    .get("/user")
    .expect(function (response) {
      assert.deepStrictEqual(response.body, { name: "Tom", age: 22 });
    })
    .end(done);
});

Se precisarmos verificar o código de status, podemos passar o código esperado ao método expect(404).

Se for necessário verificar objetos que são enviados na resposta ao cliente, podemos passar uma função ao método expect. Essa função recebe o objeto de resposta response. Através do objeto response.body, obtemos toda a resposta e a comparamos com o valor esperado. Para comparar objetos, podemos usar o método deepStrictEqual() da biblioteca assert.

Vamos executar os testes e verificar o resultado:

c:\app> npm test

> testapp@1.0.0 test
> mocha *.test.js

✔ should return Hello Test
✔ should return NotFound with status 404
✔ should return user with name Tom and age 22

3 passing (45ms)
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com