Meu primeiro teste com Typescript e Mocha/Chai
Tags: tdd, development, javascript, typescript
Published: 2020-06-06 01:27:54

---
title: Meu primeiro teste com Typescript e Mocha/Chai
published: true
description: Meu primeiro contato com typescript e testes unitários
tags: tdd,development,javascript,typescript
//cover_image: https://direct_url_to_image.jpg
---

Para quem desenvolve em __NodeJs__, __VueJs__, __React__ ou __Javascript__ puro sabe que o JS não é uma linguagem tipada, o __Typescript__ veio para dar uma solução, aproximando o JS de outras linguagens como o __JAVA__. Ele faz uma compilação do javascript, podendo definir o tipo de uma variável, objeto, interface etc. Aumentando assim a integridade das informações no seu código.

Um exemplo básico de um código em __TypeScript__ seria assim:

![Exemplo simples em Typescript](https://dev-to-uploads.s3.amazonaws.com/i/g6i1tyhrlkygz97cqwbz.png)


Se você inserir uma array, integer, float ou outro tipo de variável que não seja do tipo string, o __Typescript__ retorna um erro. Isso facilita na hora que estamos desenvolvendo alguma aplicação, onde se tem uma troca de informações e assegura que você só vai receber o que é necessário nos métodos do seu código. Um exemplo seria o caso de você criar um usuário e enviar somente o que é necessário e no tipo certo, você poderia criar uma interface no __Typescript__ assim:

![Exemplo de criação de uma interface em Typescript](https://dev-to-uploads.s3.amazonaws.com/i/uv9r0uqyd8gahzu3mznj.png)

###**E o TDD nisso aí?**

Agora, uma forma de garantir que a nossa aplicação não apresente problemas ao se evoluir e inserção de novas funcionalidades, seria utilizar a metodologia _TDD_ <_Test Driven Development_>, no português direto, Desenvolvimento Direciona a Teste, onde antes de se desenvolver os métodos e depois cria-se os testes, a lógica ai se inverte. 

*Qual a vantagem de se priorizar os testes em relação ao desenvolvimento em si?*
* Segurança na correção de _bugs_ e implementação de novas funcionalidades,
* Código limpo e bem escrito,
* Produtividade, pois se foca no que é essencial na hora de desenvolver e evita refatorações para correção de erros, evitando assim o retrabalho,
* Objetividade na hora do desenvolvimento do código, pois já se tem exatamente o que se precisa entregar.

###*E como eu aplico isso junto com o _TypeScript_?*

Existem diversas bibliotecas em javascript para se criar testes automatizados, tanto para _Frontend_ como para o _Backend_, vou falar um pouco de duas aqui, *Mocha* e *Chai*, e como usar em um código utilizando o *Typescript. O *Mocha* é um _framework_ em javascript que executa em *NodeJs* para testes, já o *Chai* é uma biblioteca utilizada pelo *Mocha* para as assertivas dos testes. E como seria um teste feito com o *Mocha* e *Chai*?

Vamos supor que, você irá criar um método que deve retornar a soma de dois inteiros, o teste seria da seguinte forma:

![Exemplo de teste no Mocha](https://dev-to-uploads.s3.amazonaws.com/i/60ue7q7i4xwd8h4sz77h.png)

Esse caso retornaria uma mensagem de erro, parecida com a imagem abaixo:
![Teste falho](https://dev-to-uploads.s3.amazonaws.com/i/d4e3hz3rxjjtdzvejvje.png)

O motivo é que a variável que passamos está retornando vazia, pois não tem nenhum método definido/implementado. Criando a função para o nosso teste, seria algo assim:
![Teste com função definida](https://dev-to-uploads.s3.amazonaws.com/i/3zmwe6qtqni01hylzsuv.png)

E o retorno do teste, seria algo assim:
![Retorno do teste com sucesso](https://dev-to-uploads.s3.amazonaws.com/i/8171izkqbcbxnwdig85o.png)

###*E o Typescript nisso?*

Aliar o *Typescript* com os testes automatizados, aumenta ainda mais a integridade e segurança dos dados, pois no caso do *Typescript*, ele só irá trabalhar com as informações que foram definidas previamente. Ficando o seu código limpo, seguro e muito mais fácil para se manter. 

Criei um repositório com um exemplo básico:
[Exemplo TS, Mocha/Chai](https://github.com/cataua/ts-mocha-exemplo), qualquer dúvida entre em contato, pois também estou aprendendo e podemos nos ajudar.

Abraços e espero que gostem desse meu primeiro artigo!