<?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: Lucas Gomes Pereira</title>
    <description>The latest articles on DEV Community by Lucas Gomes Pereira (@lucasgomesgp).</description>
    <link>https://dev.to/lucasgomesgp</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%2F1022106%2F7f0f3663-dc6b-4c02-8cb5-098df9412aae.png</url>
      <title>DEV Community: Lucas Gomes Pereira</title>
      <link>https://dev.to/lucasgomesgp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucasgomesgp"/>
    <language>en</language>
    <item>
      <title>Testes Unitários no ambiente Frontend</title>
      <dc:creator>Lucas Gomes Pereira</dc:creator>
      <pubDate>Tue, 10 Sep 2024 14:47:15 +0000</pubDate>
      <link>https://dev.to/lucasgomesgp/testes-unitarios-no-ambiente-frontend-4775</link>
      <guid>https://dev.to/lucasgomesgp/testes-unitarios-no-ambiente-frontend-4775</guid>
      <description>&lt;p&gt;Quando se fala em &lt;strong&gt;Testes de Software&lt;/strong&gt;, sempre tem muito assunto para ser discutido, e no ambiente &lt;strong&gt;Frontend&lt;/strong&gt; não é diferente, eu sempre me perguntei o que devo testar, qual a melhor abordagem para os testes, como encaixo as regras de negócios? Perguntas como essas são as que eu busco responder nesse post.&lt;/p&gt;

&lt;p&gt;Certo, mas antes de tudo isso, &lt;strong&gt;o que são testes unitários?&lt;/strong&gt;&lt;br&gt;
Para responder essa pergunta vamos para uma abordagem mais simples. O que seria uma unidade de código? Bom, se pensarmos que essa unidade representa uma pequena parte de um todo e que ela é feita para atender uma parte específica do projeto, pode se dizer que o "unitário" nada mais é do que um pedaço que vai ser testado, para ver se ele funciona como esperado. Em um pensamento mais amplo, aquela unidade tem a expectativa de atender um objetivo/ação necessária no ambiente da sua aplicação, seja realizar uma transação, clique de botão, preenchimento de formulário, ou algo nesse sentido, a sua expectativa é que justamente ela faça esse comportamento da maneira como você a projetou.&lt;/p&gt;

&lt;p&gt;Mas, essa não é nem de longe a única definição de testes unitários, porém o que eu quero que você lembre de agora em diante é que o teste unitário, realiza uma ação e que com o seu teste você espera que essa ação sera realizada da maneira como você imaginou.&lt;/p&gt;

&lt;p&gt;Qual a melhor abordagem para escrever os testes unitários no Frontend?&lt;br&gt;
Você pode encontrar diferentes abordagens quando se fala em testes unitários no Frontend, mas a que eu mais li sobre e vi muitos posts sobre ela é a : Triple AAA (A's Pattern) ou padrão dos três A's. Essa abordagem nada mais é do que a divisão dos testes em três etapas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Arrange / Arranjo: Local onde será setado toda a configuração inicial do teste, ou seja, onde será renderizado o seu componente, onde a variável receberá o seu valor inicial, onde será mockado alguma função.&lt;/li&gt;
&lt;li&gt;Act / Ação: Como o nome indica é justamente uma ação que vai ser tomada naquele objeto que foi renderizado, seja um clique de botão, preenchimento de um input, fetch de dados ou qualquer tipo de ação que trará uma expectativa futura.&lt;/li&gt;
&lt;li&gt;Assert / Expectativa : A expectativa é justamente o que você espera que aconteça depois da sua ação, ou seja, se você clicou em um link, você espera ser redirecionado para a página específica, se você preencheu um input, você espera que aquele valor esteja presente nele.&lt;/li&gt;
&lt;/ol&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%2Fuploads%2Farticles%2Fyhhztxjgdz1yoy93qqpw.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%2Fuploads%2Farticles%2Fyhhztxjgdz1yoy93qqpw.png" alt="Image description" width="800" height="274"&gt;&lt;/a&gt;&lt;br&gt;
Nesse print acima, você a divisão desses três tópicos no ambiente Frontend, onde estou testando um componente Header/cabeçalho e eu sigo esses três passos do padrão dos 3 A's.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que devo testar?&lt;/strong&gt;&lt;br&gt;
No Frontend os testes são um pouco diferentes do Backend, ou seja, aqui você vai testar alguns comportamentos da sua aplicação que vão ser entregues diretamente ao cliente. Você deve escolher aqueles componentes que são partes importantes da sua aplicação, ou seja, aqueles que não podem realizar um comportamento incomum para o cliente, como por exemplo:&lt;br&gt;
Formulários, Links, Carregamento de dados (fetchs), redirecionamentos, funções utilitárias&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas o que faz com que esses testes sejam importantes?&lt;/strong&gt;&lt;br&gt;
Todos os testes de maneira geral, vão garantir o que se chama de &lt;strong&gt;Qualidade de Software&lt;/strong&gt;, ou seja vai entregar a expectativa de um Software funcional, com base nas regras de negócios do cliente e principalmente entregando aquilo que foi proposto em contrato. Mas, o teste unitário é somente a ponta desse iceberg, se você for buscar mais a fundo, vai encontrar outros testes, como é mostrado na imagem abaixo:&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%2Fuploads%2Farticles%2Fv8ul37q4y0ntvdi5betd.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%2Fuploads%2Farticles%2Fv8ul37q4y0ntvdi5betd.png" alt="Image description" width="425" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nessa pirâmide você vai encontrar o teste unitário na base e os de integração e E2E (End to end), completando os três tipos de teste. Aqui eu não vou entrar em mais detalhes sobre esses dois outros tipos, pois o intuito é somente falar dos unitários, mas deixo aqui o exemplo para quem queira saber mais sobre. Logo mais vou fazer um post, mostrando como configurar o ambiente de testes no Next.js com Jest e Testing Library.&lt;/p&gt;

&lt;p&gt;Agradeço por apreciar o meu post :)&lt;/p&gt;

</description>
      <category>unittest</category>
      <category>testing</category>
      <category>nextjs</category>
      <category>react</category>
    </item>
    <item>
      <title>O papel das APIs no desenvolvimento</title>
      <dc:creator>Lucas Gomes Pereira</dc:creator>
      <pubDate>Tue, 07 Feb 2023 16:45:58 +0000</pubDate>
      <link>https://dev.to/lucasgomesgp/o-papel-das-apis-no-desenvolvimento-4618</link>
      <guid>https://dev.to/lucasgomesgp/o-papel-das-apis-no-desenvolvimento-4618</guid>
      <description>&lt;p&gt;A API (Application Program Interface, ou Interface de programação de aplicações) no mundo da programação tem um papel fundamental na construção e comunicação das aplicações, atuando praticamente de ponta a ponta no processo de construção.&lt;br&gt;
Dessa maneira, grande parte das operações realizadas sejam de Autenticação ou de operações de CRUD( Create, Read, Update e Delete), passam pela comunicação direta com uma API. Mas o que essa sigla tem de tão importante nesse processo de construção?&lt;/p&gt;

&lt;p&gt;Como foi citado acima, a API participa diretamente da comunicação e da solicitação de recursos de uma aplicação, dessa forma, vamos explorar com mais detalhes através das imagens abaixo:&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%2Fuploads%2Farticles%2Fu1b8wqcvhlv8gwn2zqp2.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%2Fuploads%2Farticles%2Fu1b8wqcvhlv8gwn2zqp2.png" alt="Image 01" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na imagem 01, nos temos três papeis importantes, sendo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API - Entrega recursos ou realiza as operações solicitadas&lt;/li&gt;
&lt;li&gt;Website - Atua entre o usuário e a API&lt;/li&gt;
&lt;li&gt;Usuário ou cliente - Solicitante direto de recursos.
Dito isso, é possível identificar através da imagem que a API tem o papel de "falar" uma língua comum entre o servidor que armazena o recurso e o lado do cliente que solicita esse recurso, atuando como uma espécie de tradutor para ambos os lados.&lt;/li&gt;
&lt;/ul&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%2Fuploads%2Farticles%2Fyquliy2r32srbcpemoz5.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%2Fuploads%2Farticles%2Fyquliy2r32srbcpemoz5.png" alt="Image 02" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na imagem 02, traz um exemplo do que seria um Website montado com base nos dados que estão presentes em uma API específica, ou seja, as informações desse site são dispostas através do seu carregamento, seguindo três passos:&lt;br&gt;
1° Assim que o site é aberto, uma solicitação de recursos é enviada para API, para que ela entregue os dados solicitados.&lt;br&gt;
2° Depois de solicitado a API vai em busca desses dados, para entregá-los&lt;br&gt;
3° Depois de entregues, o site é montado com base nesses dados que próvem da API.&lt;/p&gt;

&lt;p&gt;Ou seja, a API está presente em todo o processo de construção de uma aplicação, atuando na busca, na entrega, na modificação e até mesmo na montagem dos dados, fazendo com que os programadores e as aplicações, consigam usufruir de diversas fontes de dados e principalmente do seu core, que é proporcionar uma comunicação entre o lado do cliente e o lado do servidor.&lt;/p&gt;

</description>
      <category>embeds</category>
    </item>
  </channel>
</rss>
