Como melhorar a qualidade e confiabilidade do seu código com Jest

No mundo da programação, testar códigos é uma boa prática que visa garantir que as aplicações funcionem conforme o esperado, além de detectar erros e problemas de lógica, melhoram a manutenção do código. Cada linguagem possui frameworks específicos de testes, na linguagem JavaScript uma das ferramentas mais populares é o Jest.
Mas você deve estar se perguntando: O que torna o Jest tão especial? Um dos principais fatores é por ele ter sido criado para ser simples e fácil de usar, desde sua instalação e criação até a execução dos testes.
Este artigo abordará a importância de se ter testes unitários no código e como fazê-lo utilizando o framework Jest do JavaScript. Além disso, serão mostrados os benefícios e as principais características do Jest por meio de exemplos práticos. Ao final deste artigo, será possível ter uma compreensão acerca do papel desempenhado pelos testes unitários no desenvolvimento de um software.

Vantagens do uso de testes unitários
Aqui estão alguns motivos dá necessidade em fazer uso de teste unitário em seu software:
- Pré detecção dos erros: com testes unitários é possível identificar os erros de forma mais rápida antes que problemas em grande proporção venham a acontecer;
- Qualidade de código: o código fica melhor estruturado, separando responsabilidades, o que consequentemente o deixa com baixo acoplamento;
- Manutenção: quando o teste é bem escrito, fica fácil fazer alterações no código com a segurança, pois caso tenha algum problema nessas alterações, os testes unitários indicaram o erro;
- Documentação: testes unitários ajudam a entender a finalidade de classes e funções, então servem como documentação do código.
Recursos do Jest
Como falado anteriormente, o Jest é amplamente utilizado quando se trata de criação de testes no JavaScript, escolhido principalmente pela simplicidade e pela quantidade de recursos oferecidos. A seguir serão mostrados alguns dos recursos disponíveis nessa framework que a faz ser tão amada.
- Simplicidade na configuração: com o Jest é possível começar a fazer testes rapidamente, mesmo sem ter muita noção de sintaxe e sem muita configuração inicial;
- Testes de snapshot: uma característica que se destaca é a possibilidade de criar snapshots, que é uma camada a mais de teste que permite capturar uma representação do estado atual do código e comparar com versões anteriores, detectando automaticamente qualquer alteração inesperada;
- Mocks: o jest oferece recursos avançados para a criação de mocks (simulações de módulos e funções);
- Detecção automática de testes: ele detecta automaticamente arquivos de teste que contenham o sufixo .test.js ou .spec.js, trata-se de uma convenção de nomenclatura da própria framework;
- Execução rápida de testes: o jest possui uma execução rápida de testes, ele é otimizado para executar apenas os testes necessários correspondente às partes em que foram feitas alterações no código;
- Asserções integradas: o Jest possui várias formas de asserções integradas para verificar se o resultado dos testes correspondem ao esperado.
Exemplos práticos
Para um teste escrito em Jest funcionar é necessário instalá-lo em seu projeto com o comando a seguir.

Após instalado, será necessária a criação de um arquivo de configuração. Execute o comando abaixo para criar esse arquivo, note que o Jest irá fazer algumas perguntas sobre a forma como você quer que seja configurado.

Para começar a codificar testes, crie um arquivo dentro do projeto com a extensão .spec.js ou .test.js, que são os sufixos reconhecidos pelo jest. Após isso, você já pode começar a escrever seu teste. Primeiro escreva a função a ser testada.

Logo em seguida, está um exemplo de como seria escrito em Jest, um teste simples da função de subtração.

Vamos a outro exemplo, suponha que eu tenha uma função que verifica se um número é par como mostrado abaixo.

Agora, dentro de um arquivo com o sufixo reconhecido pelo jest (.test.js ou .spec.js), escreva o seguinte para testar sua função de números pares.

Note que o primeiro teste deve retornar true para passar no teste, uma vez que todos os números são pares, no segundo teste é esperado que retorne false, visto que são todos números ímpares.
Os exemplos citados são simples, porém o jest não se resume somente ao que foi apresentado, há muito mais a ser explorado, no próximo tópico mostrarei os tipos de assertividade que o jest possui.
Tipo de assertividade
No Jest há uma variedade de funções de assertividade em que é possível verificar se o resultado dos testes está correto. Irei mostrar as mais usadas, mas caso queira conhecer o restante, deixarei o link da documentação oficial.
- toBe(valor): verifica se um valor é estritamente igual a outro (usando ===).
- toEqual(valor): verifica se um valor é igual a outro, comparando profundamente objetos e arrays.
- toBeTruthy(): verifica se um valor é avaliado como verdadeiro.
- toBeFalsy(): verifica se um valor é avaliado como falso.
- not.toBe(valor): verifica se um valor não é estritamente igual a outro.
- toBeNull(): verifica se um valor é nulo.
- toBeDefined(): verifica se um valor está definido.
- toBeUndefined(): verifica se um valor é indefinido.
- toBeNaN(): verifica se um valor é NaN.
- toContain(valor): verifica se um array ou string contém um valor específico.
- toHaveLength(comprimento): verifica se um objeto tem o comprimento especificado.
- toMatch(regexp ou string): verifica se uma string corresponde a uma expressão regular ou a outra string.
- toBeInstanceOf(Classe): verifica se um objeto é uma instância de uma classe.
- toThrow(): verifica se uma função lança uma exceção.

Conclusão
Após a leitura do artigo, é notável que os testes automatizados desempenham um papel fundamental em garantir a qualidade de software, uma vez que ajuda na detecção precoce de erros, além de garantir que o código seja factível de manutenção. Foram explorados os benefícios dos testes unitários e dado destaque a algumas características que fazem do Jest uma ferramenta popular entre os desenvolvedores. Através de exemplos simples de testes, você pode compreender como o Jest funciona e como ele é eficaz para testabilidade de unidades de código.
Espero que este artigo tenha sido útil, caso tenha ficado com alguma dúvida, consulte a documentação oficial do jest.
A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.