Como Testar APIs HTTP em Node.js com Supertest: Guia Completo

Oliver Kingsley

Oliver Kingsley

14 agosto 2025

Como Testar APIs HTTP em Node.js com Supertest: Guia Completo

No cenário em rápida evolução das APIs, as equipes precisam de duas coisas: feedback rápido no nível do código e validação confiável de ponta a ponta em todos os ambientes. O Supertest entrega o primeiro — asserções HTTP extremamente rápidas para serviços Node.js. E quando você estiver pronto para colaborar entre funções, executar testes de cenário, simular dependências e publicar documentação, uma plataforma de teste de API como o Apidog completa o quadro. Este guia oficial e objetivo explica como usar o Supertest para testar APIs, onde ele se destaca e como combiná-lo com o Apidog para acelerar a entrega com confiança.

Apidog
botão

O Que É Supertest?

Supertest é uma biblioteca Node.js leve para testar servidores HTTP. Ele é construído sobre o superagent e permite escrever asserções expressivas contra códigos de status, cabeçalhos e corpos de resposta — sem a necessidade de clientes externos. É ideal quando você:

Quando você precisar de colaboração, governança de conformidade de API, orquestração de ambiente e testes visuais, você complementará o Supertest com uma plataforma de teste de API como o Apidog. O restante deste artigo mostra como fazer ambos.

botão

Instalar e Configurar o Supertest

Você pode instalar o Supertest em minutos. Use npm, pnpm ou yarn:

# npm   npm install --save-dev supertest jest

# pnpm  pnpm add -D supertest jest

# yarn

yarn add -D supertest jest

Uma API Express mínima (app.js):

const express = require('express');

const app = express();



app.get('/greet', (req, res) => {

  const name = req.query.name || 'World';

  res.json({ message: `Hello, ${name}!` });

});



module.exports = app;

Um teste simples (app.test.js) usando Supertest + Jest:

const request = require('supertest');

const app = require('./app');



describe('GET /greet', () => {

  it('greets anonymously', async () => {

    const res = await request(app)

      .get('/greet')
      .expect('Content-Type', /json/)
      .expect(200);



    expect(res.body.message).toBe('Hello, World!');

  });



  it('greets by name', async () => {

    const res = await request(app)
      .get('/greet?name=Alice')
      .expect('Content-Type', /json/)
      .expect(200);



    expect(res.body.message).toBe('Hello, Alice!');

  });

});

Atualize package.json para executar testes:

{

  "scripts": {

    "test": "jest"

  }

}

Execute seus testes:

npm test

Se você preferir Mocha ou Vitest, o Supertest funciona da mesma forma — a API .expect() é idêntica.


Escrevendo Ótimas Asserções Supertest

O poder do Supertest vem de suas asserções encadeáveis — rápidas de escrever e fáceis de ler. Aqui estão padrões que você usará todos os dias:

request(app)

  .get('/users')
  .expect(200)
  .expect('Content-Type', /json/);
request(app)

  .get('/users')
  .expect(200)
  .expect(res => {

    if (!Array.isArray(res.body)) throw new Error('Expected an array');

    if (res.body.length === 0) throw new Error('Expected at least one user');

  });
request(app)

  .get('/health')
  .expect(200)
  .expect({ status: 'ok' });



request(app)

  .get('/health')
  .expect(200)
  .expect(/"status":"ok"/);
request(app)

  .post('/posts')
  .set('Authorization', 'Bearer test-token')
  .send({ title: 'Hello', body: 'World' })
  .expect(201)
  .expect(res => {

    if (!res.body.id) throw new Error('Missing id');

  });
const agent = request.agent(app);

await agent.get('/login').expect(200);

await agent.get('/me').expect(200).expect(res => {

  if (!res.body.user) throw new Error('Expected authenticated user');

});
Dica: Mantenha os testes pequenos e determinísticos. O Supertest se destaca na validação de controladores, middlewares e adaptadores isoladamente.

Supertest em CI/CD e Monorepos

Para manter a qualidade consistente, execute o Supertest em CI para cada pull request. Uma configuração típica:

Exemplo de trecho de GitHub Actions:

name: api-tests

on: [push, pull_request]

jobs:

  test:

    runs-on: ubuntu-latest

    steps:

      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4

        with:

          node-version: '20'

      - run: npm ci

      - run: npm test -- --ci

Em monorepos, execute apenas os testes afetados e armazene em cache node_modules para acelerar os ciclos de feedback. A sobrecarga mínima do Supertest o torna uma ótima opção para grandes bases de código.


Quando Usar uma Plataforma de Teste de API

Supertest é excelente para feedback rápido no nível do código. Mas as realidades de produção exigem mais:

É aqui que uma plataforma de teste de API como o Apidog se destaca. Ele unifica design de API, mocking, testes, depuração e documentação para manter as equipes alinhadas e seus portões de qualidade duráveis.

botão
Interface de Teste do Apidog

Por Que o Apidog Complementa o Supertest


Um Fluxo de Trabalho Combinado: Supertest + Apidog

Use o Supertest para verificações centradas no desenvolvedor e o Apidog para colaboração de ponta a ponta. Aqui está uma divisão pragmática de responsabilidades:

Tarefa
Supertest
Apidog
Verificações de unidade de controlador/middleware
Excelente
Complementar
Regressões rápidas de contrato (status/cabeçalhos)
Excelente
Excelente
Governança de esquema (OpenAPI)
Manual
De primeira classe
Servidores mock para front-end
Limitado
Embutido
Cenários orientados por dados
Limitado
De primeira classe
Orquestração de CI entre ambientes
Bom
De primeira classe
Colaboração/documentação da equipe
Mínimo
De primeira classe

Fluxo de exemplo:


Padrões Avançados do Supertest

Algumas dicas adicionais que valem a pena:


Conclusão: Uma Abordagem Equilibrada para a Qualidade da API

APIs de qualidade são construídas com velocidade e rigor. O Supertest oferece aos desenvolvedores uma maneira rápida e expressiva de verificar endpoints próximos ao código — perfeito para ciclos de feedback curtos e para capturar regressões antes que escapem de um branch. É simples, confiável e testado em batalha em muitos backends Node.js.

À medida que os sistemas crescem, no entanto, você precisa de colaboração, governança de contrato e execução ciente do ambiente. É aí que o Apidog — uma plataforma de teste de API integrada — eleva seu fluxo de trabalho. Ao unificar o design de contrato (OpenAPI), servidores mock, asserções visuais, variáveis de ambiente e orquestração de CI, o Apidog ajuda as equipes a avançar em sincronia da ideia à entrega. Front-end, back-end e QA podem compartilhar a mesma fonte de verdade enquanto o Supertest continua a proteger seus caminhos de código com asserções rápidas e determinísticas.

Se você quer velocidade com confiança, use ambos:

Essa abordagem equilibrada resulta em APIs que não são apenas corretas hoje, mas resilientes à medida que seu produto evolui. Comece a escrever suas verificações Supertest agora — e dê vida a elas em um pipeline de nível de produção com o Apidog.

botão

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs