{"componentChunkName":"component---src-templates-blog-post-js","path":"/como-criar-testes-no-front-end-em-reactjs/","result":{"data":{"markdownRemark":{"fields":{"slug":"/como-criar-testes-no-front-end-em-reactjs/"},"frontmatter":{"titulo":"Como criar testes no front-end em ReactJs","data":"22/05/2020","tag":"ReactJs","image":{"childImageSharp":{"fluid":{"src":"/static/b8184c6a662b1566221a0b0526539790/7a3c2/capa.png","base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACpUlEQVQoz1VSS09TURDuDyACIkJvuX3e3j5peRakoshDHqWFSlsofdAWCrRAG0BQCIlBRBI0JrpRYqJiYkzcudOdezf+GHfG+znn2FtxMXfOuTPznW++GY3F3vFTsneCTLHYOqA3t0Ir2skc0OodaDG6YJS8EAxO/k9HnudQjN1FU2u1luy3RgUzWDzouzGG4sYOMotrWC5sch+ZzSCdLSCX38Dicgm5pXUMj4axkCsiv1rmOSZrG8dgWBpiyA/0U2lt9yMcSfGiRHoZWfLB6Ti6egcRCM0inlzCRDCG2xMzSGVWec70TJLXqsQ4Q0aXebPcDh21yNppFKyIzGVwb/8QK8Q2my8R+7sobe7B7u5Bk84GQe/kkqgYzNSWq6BWRxdkZzc/X785hulwHOFYGpOjUwhH00gQS7e3j8dZHstXa3nLVTAbgVUC/E6JBpMb9YE0LsVLaBiJ4XKsiLpoQdWsyuoiKQ37WJmGdpqwg9pWE1gRMRAWtmAYiaLm/TeIkyloc7uwuHwU98KiAtn/AWsYmI7WIBWax9FCCUO3AtDTxBlYSyCBuuM3qH36EY3rD1F3co7a0w/QzeQJtAeVYUKSLjBkB29nPx4Ud/H9+TmGh0IQRRuMg2E0p7cgRFdwZfsUNa+/oGH/BbSJErTxdYjBNMyCDNnVi4O3Z7iTyPMd1cgun3JY3sfZzpHy49k7RIJzEGhyMmnYMjGP+kcVhuXj/xiaiIi7zY/c58fIfzpRPN5+tiW0Nm4fnqzuKq+y2ygEk+jqHoCR2rDSCjGNtMkyDANTxPArxPE4mklTiTQ0iE74Q1NIvjygx30wmj2KRDPQEOovt+ca3O1+RZA8HOyv0J1ceGFuDVdJP3F8Hk1Le2havA+p8phF7oDZ0MaZMTDSUPkDFoqem+3sB4wAAAAASUVORK5CYII=","aspectRatio":1.7045454545454546,"srcSet":"/static/b8184c6a662b1566221a0b0526539790/7e7e9/capa.png 225w,\n/static/b8184c6a662b1566221a0b0526539790/62b1f/capa.png 450w,\n/static/b8184c6a662b1566221a0b0526539790/7a3c2/capa.png 733w","sizes":"(max-width: 733px) 100vw, 733px"}}}},"html":"<p>Vamos aprender a testar ouvindo <a href=\"https://www.youtube.com/watch?v=COz9lDCFHjw\">Passionfruit do Drake</a>.</p>\n<p>Todo o Dev <strong>independente do seu cargo</strong>, tem que ter ciência da importância de testes de unidade em seu código. A propósito e esse assunto que irei abordar hoje! Especificamente no mundo front-end em ReactJs.</p>\n<p><em>Mas Lorena, como assim testar front-end??? Ele e realmente necessário??</em></p>\n<p><img src=\"https://media.giphy.com/media/VhneMg6g1xrDiEpVUu/giphy.gif\" alt=\"really gif\"></p>\n<p>A realidade é que é um assunto meio <strong>dark</strong> de se dizer inclusive agora com essa nova geração do javascript, antigamente haviam poucas maneiras de testar a parte visual da aplicação. É muito importante testar, principalmente, <strong>bibliotecas de componentes, integração com biblioteca de terceiros</strong> e claro o mais importante de tudo, <strong>evitar bugs a longo prazo.</strong></p>\n<p><img src=\"https://media.giphy.com/media/xUySTD7evBn33BMq3K/giphy.gif\" alt=\"Entendi gif\"></p>\n<p>A melhor parte é que com a evolução das tecnologias temos várias maneiras de fazer testes e manter a qualidade de seus projetos.</p>\n<p>Hoje vou falar com um pouco dessas tecnologias e criar um projeto básico de login e listagem de produtos.</p>\n<h3>Tecnologias que vamos utilizar</h3>\n<ol>\n<li>\n<p><a href=\"https://github.com/facebook/create-react-app\">Create react app (CRA)</a></p>\n<p>Para criação de aplicação ReactJs</p>\n</li>\n<li>\n<p><a href=\"https://jestjs.io/\">Jest</a></p>\n<p>Biblioteca padrão do CRA. Criado pelo facebook. Ele nos permite testar snapshots de uma forma muuuito rápida, mensagens de erros claras, configuração simples entre outros..</p>\n</li>\n<li>\n<p><a href=\"https://github.com/enzymejs/enzyme\">Enzyme</a></p>\n<p>Permite ao desenvolvedor simplificar a renderização de componentes nos testes. Uma api semelhante a do Jquery para buscar elementos</p>\n</li>\n<li>\n<p><a href=\"https://github.com/adriantoine/enzyme-to-json\">Enzyme-to-json</a></p>\n<blockquote>\n<p>Converta wrappers de enzima em um formato compatível com o teste de captura instantânea Jest</p>\n</blockquote>\n</li>\n</ol>\n<h3>Criando o projeto!</h3>\n<p>A propósito você consegue ver o projeto completo <a href=\"https://github.com/LorenaKauane/react-login-testing\">clicando aqui</a>.</p>\n<p><code class=\"language-text\">npm install -g create-react-app create-react-app react-login-testing cd react-testing npm install -S prop-types</code></p>\n<h3>Vamos preparar o ambiente de testes!</h3>\n<p><code class=\"language-text\">npm i --save-dev enzyme enzyme-adapter-react-16 enzyme-to-json</code></p>\n<p>Para ver se esta tudo funcionando :</p>\n<p><code class=\"language-text\">npm test</code></p>\n<p>Você deve ter um resposta conforme imagem abaixo:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 773px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.91666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABT0lEQVQoz52S626CQBCFfRfbghfKwnKHFQRBCNrWqElt0sR/fYO+/unOpDZpUoPpj5MsG/abM3NmJFwFIRWmjwFcX2FmB7BlAhku4EcFhJey1v0OYVriYerCnHtXNapfOsRloUERQ2xJgAyWE2Fi+fwTFYvVCo4uOAg8f77h9HFCUfboNge0/QFNu0OWrxlORZJFA2MmcT9x+BGdSX8CJ/MQjqcQJKV2FcOSIWw/+mmbXD26Cbu8BvkF3B3fUTZPUMsOIsig+gL1sYaMM1TNVmuDO1PA+H4wBB3tX8964HsdTIaZCLHqtiiqFqblcUAk80YYA7vtAVFawQ0UvChH3T4j1t9jQ/DMSOTwEsagQ5odKSs6npkX5rwmNDcqQonHWcUrNZQwAylBP14izVsOgKCX3SPHbrDQiTf6PtdubwBSO9TW2LD5AZ3JCek/LX8BEV4/9Z884XEAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"test pass image\"\n        title=\"test pass image\"\n        data-src=\"/static/7b547eb85874ea34a9f067a5067f9841/612f7/1test.png\"\n        data-srcset=\"/static/7b547eb85874ea34a9f067a5067f9841/8ff5a/1test.png 240w,\n/static/7b547eb85874ea34a9f067a5067f9841/e85cb/1test.png 480w,\n/static/7b547eb85874ea34a9f067a5067f9841/612f7/1test.png 773w\"\n        sizes=\"(max-width: 773px) 100vw, 773px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Para configurar o ambiente de testes e o enzyme vá ate o arquivo <strong>setupTest.js</strong> que fica dentro da pasta src, adicione os seguintes códigos:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> Enzyme <span class=\"token keyword\">from</span> <span class=\"token string\">\"enzyme\"</span>\n<span class=\"token keyword\">import</span> Adapter <span class=\"token keyword\">from</span> <span class=\"token string\">\"enzyme-adapter-react-16\"</span>\n\nEnzyme<span class=\"token punctuation\">.</span><span class=\"token function\">configure</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> adapter<span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Adapter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Tudo feito! Agora vamos ver a estrutura do projeto. Dentro da pasta src, adicione as seguintes pastas:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 262px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 38.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABYUlEQVQoz4VSy07CUBDlM4w8CoW+Cy3QQqXEVgqhFKgVAcX4IgEhcWOiGxfEH3Dj2u9w7acdbxs1hIAuZubcuXNPzszcGCOoYPk8zowirHIZFCOBFRUwggJOKoIlMZ0TkSH5n7iJ1y2m12yIYgEfUxefrytIhoXZfIn5Yomr2wW8XgCK5kGzMui1hzsJU6Q4meEhSwpMrYIkOTNEMZ8vI8vJSKQ5cs+RyCJOsRHepviXMExqxiE4uYSbh2f4kylEpYJO9xim1YLr+XA6fdStJmynDcvpQsqXQGWF7QpDQknVwZG5Xd8/IricQSjo6PkD9IMRnKaLdu8EbjeAHwwJqQdeUncThi5sLYp8IWopxPupHPYS9HerTJSPExyO6M+WqayIimlDJipf3t5x97SCqFYxHJ/jdHSBwXiCA/MoIgoX8+9SQscIhajYsNvQzAZy5KuU9BoaLQ9atU7Goe4k2LQvi5z7F4eU5NMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"pastas a serem criadas\"\n        title=\"pastas a serem criadas\"\n        data-src=\"/static/5037e4535458a82f4afd1b48bf50eff6/8ff13/pastas.png\"\n        data-srcset=\"/static/5037e4535458a82f4afd1b48bf50eff6/8ff5a/pastas.png 240w,\n/static/5037e4535458a82f4afd1b48bf50eff6/8ff13/pastas.png 262w\"\n        sizes=\"(max-width: 262px) 100vw, 262px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>No arquivo <strong>App.js</strong> adicionaremos um componente que recebe a propriedade isLoggedin, username e products. Esse componente deve renderizar a dashboard se ele estiver autenticado, caso contrario devera mostrar o componente de login.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"./App.css\"</span>\n<span class=\"token keyword\">import</span> Login <span class=\"token keyword\">from</span> <span class=\"token string\">\"./pages/Login\"</span>\n<span class=\"token keyword\">import</span> Dashoboard <span class=\"token keyword\">from</span> <span class=\"token string\">\"./pages/Dashboard\"</span>\n<span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">\"prop-types\"</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> isLoggedin<span class=\"token punctuation\">,</span> username<span class=\"token punctuation\">,</span> products <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div className<span class=\"token operator\">=</span><span class=\"token string\">\"App\"</span><span class=\"token operator\">></span>\n      <span class=\"token punctuation\">{</span>isLoggedin <span class=\"token operator\">?</span> <span class=\"token punctuation\">(</span>\n        <span class=\"token operator\">&lt;</span>Dashoboard username<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>username<span class=\"token punctuation\">}</span> products<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>products<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      <span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>\n        <span class=\"token operator\">&lt;</span>Login <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      <span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\nApp<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  isLoggedin<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>bool<span class=\"token punctuation\">,</span>\n  username<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  products<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>array<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> App</code></pre></div>\n<p>Dashboard:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">\"prop-types\"</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Dashboard</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> username<span class=\"token punctuation\">,</span> products <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>p<span class=\"token operator\">></span>Welcome<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>username<span class=\"token punctuation\">}</span><span class=\"token operator\">!</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n      <span class=\"token punctuation\">{</span>products <span class=\"token operator\">?</span> <span class=\"token punctuation\">(</span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>ul<span class=\"token operator\">></span>\n            <span class=\"token punctuation\">{</span>products<span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">product</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n              <span class=\"token operator\">&lt;</span>li key<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>product<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n                <span class=\"token operator\">&lt;</span>p<span class=\"token operator\">></span>Name<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>product<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span><span class=\"token operator\">|</span><span class=\"token operator\">&lt;</span>p<span class=\"token operator\">></span>Price<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>product<span class=\"token punctuation\">.</span>price<span class=\"token punctuation\">}</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n              <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>li<span class=\"token operator\">></span>\n            <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n          <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>ul<span class=\"token operator\">></span>\n          <span class=\"token operator\">&lt;</span>strong<span class=\"token operator\">></span>\n            Total<span class=\"token operator\">:</span>\n            <span class=\"token punctuation\">{</span>products\n              <span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> price <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> price<span class=\"token punctuation\">)</span>\n              <span class=\"token punctuation\">.</span><span class=\"token function\">reduce</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">total<span class=\"token punctuation\">,</span> price</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> total <span class=\"token operator\">+</span> price<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n          <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>strong<span class=\"token operator\">></span>\n        <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      <span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span>\n        <span class=\"token operator\">&lt;</span>strong<span class=\"token operator\">></span><span class=\"token punctuation\">{</span>username<span class=\"token punctuation\">}</span> has no registered products<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>strong<span class=\"token operator\">></span>\n      <span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\nDashboard<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  username<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  products<span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>array<span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> Dashboard</code></pre></div>\n<p>Logins:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">Login</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>strong<span class=\"token operator\">></span>Hello stranger<span class=\"token punctuation\">.</span> Sign <span class=\"token keyword\">in</span> to <span class=\"token keyword\">continue</span><span class=\"token punctuation\">.</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>strong<span class=\"token operator\">></span>\n      Username<span class=\"token operator\">:</span>\n      <span class=\"token operator\">&lt;</span>input <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      Passoword<span class=\"token operator\">:</span> <span class=\"token operator\">&lt;</span>input <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">alert</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>Sign<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3>Vamos para os testes!!!</h3>\n<p>Mas peraaaaa, antes de escrever vamos validar o que iremos testar hehehe.</p>\n<h3>Cases de testes</h3>\n<h3>APP</h3>\n<ul>\n<li>✅ Deve renderizar o login para o usuario não logado</li>\n<li>✅ Deve renderizar a dashboard para o usuario logado</li>\n<li>✅ Deve renderizar a dashboard para o usuario logado mas sem produtos e mostrar mensagem</li>\n</ul>\n<h3>Login</h3>\n<ul>\n<li>✅ Clicar no botão e mostrar mensagem de alerta</li>\n</ul>\n<h3>Dashboard</h3>\n<ul>\n<li>✅ Soma do valor total</li>\n</ul>\n<p>Agora sim!!! Vamos testar!!!!</p>\n<p><img src=\"https://media.giphy.com/media/BoIUmD3M39B0rTCF4I/giphy.gif\" alt=\"Aleluia\"></p>\n<p>Antes de irmos para o mais fácil, primeiro vamos fazer as verificações manuais do enzyme. No arquivo <strong>App.test.js.</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> App <span class=\"token keyword\">from</span> <span class=\"token string\">\"./App\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> mount <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"enzyme\"</span>\n<span class=\"token keyword\">import</span> Login <span class=\"token keyword\">from</span> <span class=\"token string\">\"./pages/Login\"</span>\n<span class=\"token keyword\">import</span> Dashboard <span class=\"token keyword\">from</span> <span class=\"token string\">\"./pages/Dashboard\"</span>\n\n<span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"should render the Login for the non logged in user\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> props <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    isLoggedin<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n    username<span class=\"token operator\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n    products<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>App <span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>props<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>Dashboard<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>Login<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"strong\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span>\n    <span class=\"token string\">\"Hello stranger. Sign in to continue.\"</span>\n  <span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"button\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Sign\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"should render the Dashboard for the logged in user\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> props <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    isLoggedin<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    username<span class=\"token operator\">:</span> <span class=\"token string\">\"Pedro\"</span><span class=\"token punctuation\">,</span>\n    products<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span>\n        id<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n        name<span class=\"token operator\">:</span> <span class=\"token string\">\"T-shirt\"</span><span class=\"token punctuation\">,</span>\n        price<span class=\"token operator\">:</span> <span class=\"token number\">25</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">{</span>\n        id<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n        name<span class=\"token operator\">:</span> <span class=\"token string\">\"Pants\"</span><span class=\"token punctuation\">,</span>\n        price<span class=\"token operator\">:</span> <span class=\"token number\">50</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>App <span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>props<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>Dashboard<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>Login<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"p\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Welcome, Pedro!\"</span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"li\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"li\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Name: T-shirt|Price: 25\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"li\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Name: Pants|Price: 50\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"should render the Dashboard for the logged in user without Products\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> props <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    isLoggedin<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    username<span class=\"token operator\">:</span> <span class=\"token string\">\"Joana\"</span><span class=\"token punctuation\">,</span>\n    products<span class=\"token operator\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>App <span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>props<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span>Dashboard<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveLength</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"p\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Welcome, Joana!\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"strong\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">at</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toEqual</span><span class=\"token punctuation\">(</span>\n    <span class=\"token string\">\"Joana has no registered products\"</span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Opção mais fácil - <strong>snapshots.</strong></p>\n<p>As validações manuais do Enzyme é otima, mas temos como melhorar todo o processo sem precisar escrever essas condições. Segue:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> App <span class=\"token keyword\">from</span> <span class=\"token string\">\"./App\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> mount <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"enzyme\"</span>\n<span class=\"token keyword\">import</span> toJson <span class=\"token keyword\">from</span> <span class=\"token string\">\"enzyme-to-json\"</span>\n\n<span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"should render the Login for the non logged in user\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> props <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    isLoggedin<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n    username<span class=\"token operator\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n    products<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>App <span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>props<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span><span class=\"token function\">toJson</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toMatchSnapshot</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"should render the Dashboard for the logged in user\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> props <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    isLoggedin<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    username<span class=\"token operator\">:</span> <span class=\"token string\">\"Pedro\"</span><span class=\"token punctuation\">,</span>\n    products<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span>\n        id<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n        name<span class=\"token operator\">:</span> <span class=\"token string\">\"T-shirt\"</span><span class=\"token punctuation\">,</span>\n        price<span class=\"token operator\">:</span> <span class=\"token number\">25</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">{</span>\n        id<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n        name<span class=\"token operator\">:</span> <span class=\"token string\">\"Pants\"</span><span class=\"token punctuation\">,</span>\n        price<span class=\"token operator\">:</span> <span class=\"token number\">50</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>App <span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>props<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span><span class=\"token function\">toJson</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toMatchSnapshot</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"should render the Dashboard for the logged in user without Products\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> props <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    isLoggedin<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n    username<span class=\"token operator\">:</span> <span class=\"token string\">\"Joana\"</span><span class=\"token punctuation\">,</span>\n    products<span class=\"token operator\">:</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>App <span class=\"token punctuation\">{</span><span class=\"token operator\">...</span>props<span class=\"token punctuation\">}</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span>\n\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span><span class=\"token function\">toJson</span><span class=\"token punctuation\">(</span>app<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toMatchSnapshot</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Adicionamos apenas <strong>expect(toJson(app)).toMatchSnapshot()</strong>. Sendo assim, será gerado um arquivo na pasta <strong>snapshots</strong> automaticamente, e esse arquivo contém toda a estrutura de renderização do componente. Se você alterar um componente e não alterar os <strong>snapshots</strong> seus testes vão quebrar.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 960px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABcElEQVQoz41T7XKDIBD0XZpo0IAKKiBaY0w7nf7r+z/M9iDRiU6S9sd6h9ytex9GvLTwSIXGsTDIlQu2Nic07Yg4lTgcqwVJpoL173PV0lniLeHYHXJkeYNozyRE2aDSFjtWBvikGTPJI9+Tzv58FzFeoTUt3m0HYx3Kyq6Ctsoene8/EvmHJ63tCa6/EKHDIbslbJSuyO7u7hHN0lXzDtNPYNSHRFAiIeFX6xFTcLwpfVvFSuGeSPt+xDiMcFS6NQ6maakdV1sI6nOukb4gWwh9AOM1vr5/0HUXsFSFxAXZ1WZP+rkiTO4I3fAZ1mbHCoJcpr6/TTP5T8n+gtPeiaqDchPt3wDTTTBtHwZl3BmlshT89+RXhGXd0yJPaOwZmoiNHYnsQuQfKEh1vFH5TGkgzHIT1iWTNKBCBXj/qOgsJDJVo9AGXGlwSSh0aNFThUJaUnVG3Z7C6ijdQ1DpnH49rgdUdqAYE8r2G8FelPwLgap2LT3U158AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"erro\"\n        title=\"erro\"\n        data-src=\"/static/680ab401b336f44ca99d78bd6b2de6a0/d9199/testeerrotojson.png\"\n        data-srcset=\"/static/680ab401b336f44ca99d78bd6b2de6a0/8ff5a/testeerrotojson.png 240w,\n/static/680ab401b336f44ca99d78bd6b2de6a0/e85cb/testeerrotojson.png 480w,\n/static/680ab401b336f44ca99d78bd6b2de6a0/d9199/testeerrotojson.png 960w,\n/static/680ab401b336f44ca99d78bd6b2de6a0/78415/testeerrotojson.png 1207w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Mas para atualizar e bem simples apenas pressionar \"u\" e o jest faz toda a mágica.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 960px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 15%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAmElEQVQI131Ouw6DMBDjZyAlCQ15QgRBtEIVW5f+/6+4JlOnDtadbZ3PTScdpJlg4orBZdi0wXLXNkP6tUL5BTZwvyfcdPiLRjNsZcAx7yixYGaoNAn9ECEYIOiLIUFRE8qj7S1aluh+ULXeVb/xbPTeXviUA+e0ofDwaulSQSB3fBLzXqejPi3Pyj29MSwwbH9pKT+gxxlftZZfyRXgb2wAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"changes snapshot\"\n        title=\"changes snapshot\"\n        data-src=\"/static/277cafd196e5bf17c60ff2c8f2c48417/d9199/changesnapto.png\"\n        data-srcset=\"/static/277cafd196e5bf17c60ff2c8f2c48417/8ff5a/changesnapto.png 240w,\n/static/277cafd196e5bf17c60ff2c8f2c48417/e85cb/changesnapto.png 480w,\n/static/277cafd196e5bf17c60ff2c8f2c48417/d9199/changesnapto.png 960w,\n/static/277cafd196e5bf17c60ff2c8f2c48417/26a94/changesnapto.png 1102w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3>Eventos:</h3>\n<p>Para adicionar eventos e muito simples.</p>\n<p>Adicionei um arquivo de testes na pasta do Login. Chamado <strong>login.test.js</strong></p>\n<p>Pra mostrar um evento de clique:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span>\n<span class=\"token keyword\">import</span> Login <span class=\"token keyword\">from</span> <span class=\"token string\">\"./\"</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> mount <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"enzyme\"</span>\n\n<span class=\"token function\">it</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Click the button and show the alert\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> login <span class=\"token operator\">=</span> <span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&lt;</span>Login <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span>\n  window<span class=\"token punctuation\">.</span>alert <span class=\"token operator\">=</span> jest<span class=\"token punctuation\">.</span><span class=\"token function\">fn</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n  login<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"button\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">simulate</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"click\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token function\">expect</span><span class=\"token punctuation\">(</span>window<span class=\"token punctuation\">.</span>alert<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toHaveBeenCalledWith</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Vários outros eventos que você consegue adicionar, a documentação e muito rica e fácil entendimento.</p>\n<h3>Relatório</h3>\n<p>Para olhar o relatório do seu teste e apenas rodar:</p>\n<p><code class=\"language-text\">npm test -- --coverage</code></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 960px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 47.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABuElEQVQoz5VSSY7bMBD0Y2Jbuy1xExet1hiZwOMZBDkFyP+fUSlKsTPILYdCS2x2dXWzdvdfd8h2hOuuMP6CqrZIComSsVYB+ckgLSWhVsTc43uDXBHPj7nAzoUJtfAs7lYYN8P3L9CMLkY2Ue2AMFwhzAAbFrQ8s93Ce1e04UIxC4U4HLIGu3DWKNlhT/bYsTi3uNQGSjhoqpsYi0rjm7A4U3U4acw64PBH4ZHKEuZj3arw5j0ME1naIMslsspANBpOeY6rMC8TkkygHzs0xqOqJHobWCxRFAIlYUlYkvCwEg4Bb33A0nk4kqckrKRGy+KkUvDjgJTFOng0yq1NnO9QFYpEzBPD2fwlHH4scDfuseNojUFWaOgpQI891Sr0bwuOqYD/OqKOCrVBeJ2xT5p1TV+4tz3Hzh8jKyqrjUXBfWWlYWxRKY5tOxR1C90Pa076wEfzKEULFXrknCQ6ID9t4z53aNwCbWectIXsSc6Ft3zhpNgscsw2W8QY/zd7yKeFPmMlvH//udll9Jg/JphuxvX1fXtBXnhcTLj8GP/9/ox4dzcuN/qrx3xZME4zvSSeRv1fRNLfwqJBJ0jZhK8AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"imagem relatorio testes\"\n        title=\"imagem relatorio testes\"\n        data-src=\"/static/eddc8631ebadf9ca47ae8f36702e4206/d9199/covarege.png\"\n        data-srcset=\"/static/eddc8631ebadf9ca47ae8f36702e4206/8ff5a/covarege.png 240w,\n/static/eddc8631ebadf9ca47ae8f36702e4206/e85cb/covarege.png 480w,\n/static/eddc8631ebadf9ca47ae8f36702e4206/d9199/covarege.png 960w,\n/static/eddc8631ebadf9ca47ae8f36702e4206/fd84e/covarege.png 1056w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Temos também de visualizar na web, o arquivo gerado fica em: <code class=\"language-text\">/projeto/coverage/lcov-report/index.html</code></p>\n<p>Abra com qualquer navegador.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 960px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 27.916666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABA0lEQVQY052QS26DMBRF2f8eOu2s0w4ziLqBEByBMZQKQkjC32D+3D4cNeqwquUrn3ueJUs2GqUwTBP6YUA/jsQjVN8/HPUfv+Jvy1BliTYvdJo8R1sUkFmGzQ9S6oyywUwP67SPLKp78m9vdDxAx7+gnAADDzGJGKMboTAdVJarZ639qXvNPH1PnjzdN7/1mgntNjauSYA8pUuZD+7uYbk72GKP4i4oHm6xgzThmrfzfuHIEhdV6tPMRnYVyG/iyQZPGWLJkLQMH/4b3tkLdvwVcWPh0jCExQHnytR8ro8IS5P6EVd1Ij4gIo6lhWjzNDeWhb57XWmvWJYZ8zJRZt3/k2/+xMYGn6Y+UwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"finalizado navegador\"\n        title=\"finalizado navegador\"\n        data-src=\"/static/0439d2f54edebb6aa1fecf01a5db3607/d9199/finalizando.png\"\n        data-srcset=\"/static/0439d2f54edebb6aa1fecf01a5db3607/8ff5a/finalizando.png 240w,\n/static/0439d2f54edebb6aa1fecf01a5db3607/e85cb/finalizando.png 480w,\n/static/0439d2f54edebb6aa1fecf01a5db3607/d9199/finalizando.png 960w,\n/static/0439d2f54edebb6aa1fecf01a5db3607/07a9c/finalizando.png 1440w,\n/static/0439d2f54edebb6aa1fecf01a5db3607/3e992/finalizando.png 1902w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h3>Por fim...</h3>\n<p>Testes garantem que podemos evoluir nosso software com qualidade. Não há razão para não começar a testar hoje. Ambas tecnologias tem uma documentação exelente.</p>\n<p>Boa sorte nos seus testes,</p>\n<p>Até mais,</p>\n<p><img src=\"https://media.giphy.com/media/2YgCmRh9Arduw8LshF/giphy.gif\" alt=\"bye\"></p>","timeToRead":6}},"pageContext":{"slug":"/como-criar-testes-no-front-end-em-reactjs/","previousPost":{"fields":{"slug":"/como-configurar-dominio-no-netlify-e-godaddy/"},"frontmatter":{"templateKey":"blog-post","data":"28 de Maio de 2020","tag":"assuntos aleatórios","titulo":"Como configurar domínio no netlify e godaddy","locale":"pt"},"timeToRead":2},"nextPost":{"fields":{"slug":"/4-mulheres-incriveis-que-fizeram-historia-com-ti/"},"frontmatter":{"templateKey":"blog-post","data":"11 de Maio de 2020","tag":"Programação","titulo":"4 Mulheres Incríveis que fizeram história com TI","locale":"pt"},"timeToRead":2},"locale":"pt"}}}