<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rogério Caetano</title>
    <description>The latest articles on DEV Community by Rogério Caetano (@cataua).</description>
    <link>https://dev.to/cataua</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F74095%2F3551a0e9-8b9c-4a57-8324-2e07f10ea95b.png</url>
      <title>DEV Community: Rogério Caetano</title>
      <link>https://dev.to/cataua</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cataua"/>
    <language>en</language>
    <item>
      <title>Meu primeiro teste com Typescript e Mocha/Chai</title>
      <dc:creator>Rogério Caetano</dc:creator>
      <pubDate>Sat, 06 Jun 2020 01:27:54 +0000</pubDate>
      <link>https://dev.to/cataua/meu-primeiro-teste-com-typescript-e-mocha-chai-43ni</link>
      <guid>https://dev.to/cataua/meu-primeiro-teste-com-typescript-e-mocha-chai-43ni</guid>
      <description>&lt;p&gt;Para quem desenvolve em &lt;strong&gt;NodeJs&lt;/strong&gt;, &lt;strong&gt;VueJs&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt; ou &lt;strong&gt;Javascript&lt;/strong&gt; puro sabe que o JS não é uma linguagem tipada, o &lt;strong&gt;Typescript&lt;/strong&gt; veio para dar uma solução, aproximando o JS de outras linguagens como o &lt;strong&gt;JAVA&lt;/strong&gt;. 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.&lt;/p&gt;

&lt;p&gt;Um exemplo básico de um código em &lt;strong&gt;TypeScript&lt;/strong&gt; seria assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg6i1tyhrlkygz97cqwbz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg6i1tyhrlkygz97cqwbz.png" alt="Exemplo simples em Typescript" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você inserir uma array, integer, float ou outro tipo de variável que não seja do tipo string, o &lt;strong&gt;Typescript&lt;/strong&gt; 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 &lt;strong&gt;Typescript&lt;/strong&gt; assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuv9r0uqyd8gahzu3mznj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fuv9r0uqyd8gahzu3mznj.png" alt="Exemplo de criação de uma interface em Typescript" width="800" height="711"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;E o TDD nisso aí?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;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 &lt;em&gt;TDD&lt;/em&gt; &amp;lt;&lt;em&gt;Test Driven Development&lt;/em&gt;&amp;gt;, 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. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Qual a vantagem de se priorizar os testes em relação ao desenvolvimento em si?&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Segurança na correção de &lt;em&gt;bugs&lt;/em&gt; e implementação de novas funcionalidades,&lt;/li&gt;
&lt;li&gt;Código limpo e bem escrito,&lt;/li&gt;
&lt;li&gt;Produtividade, pois se foca no que é essencial na hora de desenvolver e evita refatorações para correção de erros, evitando assim o retrabalho,&lt;/li&gt;
&lt;li&gt;Objetividade na hora do desenvolvimento do código, pois já se tem exatamente o que se precisa entregar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;E como eu aplico isso junto com o &lt;em&gt;TypeScript&lt;/em&gt;?&lt;/em&gt;
&lt;/h3&gt;

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

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F60ue7q7i4xwd8h4sz77h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F60ue7q7i4xwd8h4sz77h.png" alt="Exemplo de teste no Mocha" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse caso retornaria uma mensagem de erro, parecida com a imagem abaixo:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fd4e3hz3rxjjtdzvejvje.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fd4e3hz3rxjjtdzvejvje.png" alt="Teste falho" width="756" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3zmwe6qtqni01hylzsuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F3zmwe6qtqni01hylzsuv.png" alt="Teste com função definida" width="800" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E o retorno do teste, seria algo assim:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8171izkqbcbxnwdig85o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8171izkqbcbxnwdig85o.png" alt="Retorno do teste com sucesso" width="756" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;E o Typescript nisso?&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Aliar o &lt;em&gt;Typescript&lt;/em&gt; com os testes automatizados, aumenta ainda mais a integridade e segurança dos dados, pois no caso do &lt;em&gt;Typescript&lt;/em&gt;, 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. &lt;/p&gt;

&lt;p&gt;Criei um repositório com um exemplo básico:&lt;br&gt;
&lt;a href="https://github.com/cataua/ts-mocha-exemplo" rel="noopener noreferrer"&gt;Exemplo TS, Mocha/Chai&lt;/a&gt;, qualquer dúvida entre em contato, pois também estou aprendendo e podemos nos ajudar.&lt;/p&gt;

&lt;p&gt;Abraços e espero que gostem desse meu primeiro artigo!&lt;/p&gt;

</description>
      <category>tdd</category>
      <category>development</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
