1
resposta

Como mockar uma dependencia do controller em um teste que usa o supertest?

Como fazer para mockar uma dependência de um serviço que é utilizado na rota que estou testando pelo supertest? O serviço em questão recebe um repositório como dependência para buscar dados no banco, meu objetivo seria mockar um metodo desse repositorio para o teste não ficar acessando banco de dados e ficando lento.

1 resposta

Olá,

O jest tem funcionalidades para mock de módulos que podem ser úteis para você. No caso de exemplo da documentação:

import axios from 'axios';
import Users from './users';

jest.mock('axios');

test('should fetch users', () => {
  const users = [{name: 'Bob'}];
  const resp = {data: users};
  axios.get.mockResolvedValue(resp);

  // or you could use the following depending on your use case:
  // axios.get.mockImplementation(() => Promise.resolve(resp))

  return Users.all().then(data => expect(data).toEqual(users));
});

É possível mockar métodos de uma forma semelhante. Por exemplo:

import { meuModulo } from 'caminho.js';
jest.mock('caminho.js');

A implementação dos valores mockados se dá da mesma forma, criando os valores de teste dentro de test() e passando como parâmetro, como por exemplo modificando um pouco o que está na documentação:

test('descrição do teste', () => {
  const paramMock = // dado a ser mockado;
  meuModulo.mockResolvedValue(paramMock);

  // etc
});

Espero ter ajudado!

Bons estudos ;)