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!