Suites: O Sucessor do Automock e o Futuro dos Testes de Unidade


Suites: O Sucessor do Automock e o Futuro dos Testes de Unidade

Por anos, o Automock foi um dos frameworks mais populares para a criação de mocks e stubs em ambientes de teste de back-end. No entanto, à medida que a tecnologia evolui, novas ferramentas mais robustas e modernas surgem. É nesse contexto que o Automock foi substituído pelo Suites, uma solução inovadora que já vem ganhando forte adesão na comunidade de desenvolvedores.

Se você busca simplificar os seus testes unitários e está curioso para entender as capacidades do Suites, continue lendo este guia completo!

Do Automock ao Suites

Em 13 de julho de 2024, a equipe responsável pelo Automock decidiu aposentá-lo e lançar o Suites como seu sucessor oficial. Construído com base no sólido alicerce do Automock, o Suites não apenas conserva as funcionalidades anteriores, mas também oferece uma série de melhorias e suporte aprimorado para as necessidades modernas de teste.

Entre suas melhorias, o Suites foca em fornecer uma experiência mais integrada com frameworks como NestJS, Jest e Sinon. Além disso, facilita o processo de escrita de testes mais confiáveis, com um desenho robusto pensado para acompanhar os desafios do desenvolvimento atual.

O Que é o Suites?

O Suites é um metaframework de testes. Diferentemente de frameworks tradicionais que fornecem funcionalidades específicas, o Suites atua como um “framework dos frameworks”, orquestrando e potencializando o uso de bibliotecas subjacentes.

Ele traz suporte para injeção de dependências (DI), bibliotecas de mocking e testes, e é especialmente útil para backend. A proposta é criar um ambiente de teste flexível e minimamente configurável enquanto mantém os padrões de qualidade exigidos no mercado. O Suites já conta com mais de 37.000 downloads semanais no NPM e 428 estrelas no GitHub.

Principais Recursos do Suites

  • Adaptação a múltiplos frameworks de injeção de dependência (DI): Integra-se com frameworks como NestJS e TSyringe (este último ainda em desenvolvimento).
  • Teste unitário isolado e integrado: Suporta tanto testes isolados quanto sociáveis, oferecendo flexibilidade no desenvolvimento de testes de unidade.
  • Mocking sem Configuração: Sua API poderosa elimina a necessidade de setups manuais cansativos, reduzindo significativamente o boilerplate no código.
  • Mocks Tipados: Com integração nativa ao TypeScript, o Suites preserva os tipos das dependências reais enquanto cria os mocks – ideal para evitar erros de tipagem.
  • Compatibilidade Retroativa: Projetado para uma transição suave do Automock, com pouca ou nenhuma necessidade de reescrever suas antigas implementações.
  • Alto Desempenho: Usa um container virtual leve e otimizado para setups rápidos de testes, sem sobrecarregar o sistema ou aumentar o tempo de execução.

Suites em Ação: Um Exemplo com NestJS

Vamos aplicar o Suites em um exemplo prático de uso no NestJS, utilizando o framework Jest para criar testes unitários. O foco será mostrar como simplificar o desenvolvimento de mocks para testes solitários e sociáveis.

Configurando o Projeto

Primeiro, crie um novo projeto NestJS com o comando:

nest new nome-do-projeto

Depois de configurar sua aplicação, instale o pacote @suites/unit e os adaptadores necessários:

npm install --save-dev @suites/unit @suites/jest reflect-metadata

Implementando um Teste de Unidade

Imagine que você possui um controlador chamado ProductsController, responsável por funções CRUD. Veja como testar o método getAll() de forma isolada:

Código do teste:


import { TestBed } from '@suites/unit';
import { ProductsController } from './products.controller';
import { ProductsService } from './products.service';

describe('ProductsController', () => {
let controller: ProductsController;
let productsServiceMock: jest.Mocked;

beforeEach(async () => {
const testBed = TestBed.solitary(ProductsController).mock(ProductsService);
productsServiceMock = testBed.getMock(ProductsService);
controller = testBed.unit;
});

it('Deve retornar todos os produtos', async () => {
productsServiceMock.findAll.mockReturnValue([{ id: 1, name: 'Produto A' }]);
const result = await controller.getAll();
expect(result).toEqual([{ id: 1, name: 'Produto A' }]);
});
});

Com apenas algumas linhas, conseguimos isolar a lógica do controlador e testar seu comportamento sem a necessidade de configurar o serviço real.

Um Novo Modelo de Testes

A complexidade nos testes muitas vezes decorre de setups demorado ou dependência de ambientes externos (como bancos de dados reais). Ferramentas como o Suites transformam essa jornada, provendo um ecossistema ágil e eficiente para contratação de mocks automatizados.

Qual a sua opinião sobre o uso de frameworks como o Suites? Você tem algum exemplo de como essas ferramentas otimizam o desenvolvimento? Nos conte nos comentários abaixo!

Categories