Black November

ATÉ 50% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

2
respostas

Por que usar o supertest

Gostaria de entender o por que baixar um dependência como o super, e não usar o fetch?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas

Pelo que eu entendi, o benefício de usar o SuperTest é justamente não precisar subir o servidor nem instanciar uma porta.

Porque do jeito que foi mostrado, parece que ele está sendo usado praticamente como um fetch, já que o servidor é iniciado manualmente.

Esse seria o jeito mais correto de usá-lo?

import request from 'supertest';
import app from '../../app.js';

describe('Editoras Routes', () => {
  it('should return list of editoras', async () => {
    const res = await request(app).get('/editoras');

    expect(res.status).toBe(200);
    expect(res.body).toEqual(expect.any(Array));
  });
});

Oi, Laurence! Como vai?

O problema aqui é comparar SuperTest com fetch como se fossem equivalentes — mas eles não têm o mesmo propósito nos testes.

SuperTest trabalha diretamente com a instância do app Express, sem precisar subir servidor e porta. Isso garante testes mais rápidos, mais estáveis e que não dependem de ambiente externo. Já o fetch sempre exige uma URL, o que obrigaria você a iniciar o servidor manualmente em outro processo.

Resolve fazendo o seguinte:
Use SuperTest sempre que quiser testar rotas de forma isolada, sem iniciar servidor. Ele injeta a requisição direto no Express e retorna um objeto já estruturado para testes (status, headers, body).

Veja este exemplo:


import request from 'supertest';
import app from '../../app.js';

describe('Editoras Routes', () => {
  it('should return list of editoras', async () => {
    const res = await request(app).get('/editoras');

    expect(res.status).toBe(200);
    expect(res.body).toEqual(expect.any(Array));
  });
});

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.