<?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: Ruan Valente</title>
    <description>The latest articles on DEV Community by Ruan Valente (@ruanvalente).</description>
    <link>https://dev.to/ruanvalente</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%2F178682%2F952ea026-d4f7-432d-9438-40c266c0ee68.jpeg</url>
      <title>DEV Community: Ruan Valente</title>
      <link>https://dev.to/ruanvalente</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ruanvalente"/>
    <language>en</language>
    <item>
      <title>Uma introdução ao Protractor - Angular Testing E2E</title>
      <dc:creator>Ruan Valente</dc:creator>
      <pubDate>Sun, 22 Jan 2023 21:47:31 +0000</pubDate>
      <link>https://dev.to/ruanvalente/uma-introducao-ao-protractor-angular-testing-e2e-1gm0</link>
      <guid>https://dev.to/ruanvalente/uma-introducao-ao-protractor-angular-testing-e2e-1gm0</guid>
      <description>&lt;p&gt;Neste pequeno post pretendo condensar meu estudos referente a ferramenta  &lt;strong&gt;&lt;a href="https://www.protractortest.org/#/" rel="noopener noreferrer"&gt;Protactor&lt;/a&gt;&lt;/strong&gt; compartilhando este pequeno documento como "guia" de consulta sobre o assunto.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que são testes 🤔
&lt;/h2&gt;

&lt;p&gt;O teste do software é a investigação do software a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar, se relaciona com o conceito de verificação e validação. Isso inclui o processo de utilizar o produto para encontrar seus defeitos.&lt;/p&gt;

&lt;p&gt;Dito isso teste de softwares tem apenas uma finalidade &lt;strong&gt;revelar falhas/bugs para que sejam corrigidas até que o produto final atinja a qualidade desejada / acordada&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com isso, seguimos um  &lt;strong&gt;ciclo&lt;/strong&gt; de &lt;strong&gt;desenvolvimento&lt;/strong&gt; onde escrevemos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;(Red)&lt;/strong&gt;: É a primeira fase do ciclo, em que o desenvolvedor escreve um código de teste para uma nova funcionalidade, ainda que não tenha o código de produção elaborado. Provavelmente, esse teste vai falhar, mas é justamente essa a intenção.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;(Green)&lt;/strong&gt;: Esta é a segunda etapa, em que é feito o código que irá passar no teste da etapa anterior. É importante que somente esse código seja escrito.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;(Refactoring)&lt;/strong&gt;: Esta é a etapa final, para limpar o código, melhorar estruturas, diminuir as linhas e aprimorar a performance.&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%2F1upn35l7xxaw7rlg6sqm.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%2F1upn35l7xxaw7rlg6sqm.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      *Imagem referente ao ciclo do TDD.*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Existem também diversos tipos de testes de softwares alguns são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teste de unidade&lt;/strong&gt; – testa-se unidades menores de um software, de modo isolado, para ver se todas funcionam adequadamente;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teste de integração&lt;/strong&gt; – depois das unidades testadas, realiza-se uma verificação se elas funcionam juntas, integradas. Pode ocorrer delas apresentarem incompatibilidades ao funcionarem em conjunto, mesmo após terem sido aprovadas no teste de unidade;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testes E2E&lt;/strong&gt;  - São baseados em regras e/ou requisitos associados à uma ação do usuário. Você parte do princípio que deverão existir reações satisfatórias para determinadas ações na sua interface (sucesso em um redirecionamento a partir de um link clicado, a validação de um formulário, se o pagamento de um produto foi confirmado, se o produto foi adicionado ao carrinho corretamente, etc).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neste pequeno documento vamos estar vendo um pouco sobre como funciona testes do tipo &lt;strong&gt;E2E&lt;/strong&gt; usando &lt;strong&gt;Angular&lt;/strong&gt; com &lt;strong&gt;Protractor&lt;/strong&gt; porém antes vamos entender um pouco sobre o que é essa ferramenta.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o Protractor 🤔
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Protractor&lt;/strong&gt; é um &lt;strong&gt;framework&lt;/strong&gt; de testes funcionais para aplicações AngularJS (Angular 2+) e funciona como uma solução integradora combinando poderosas ferramentas e tecnologias tais como NodeJS, Selenium, webDriver, Jasmine, Cucumber e Mocha.&lt;/p&gt;

&lt;p&gt;Para que possamos  fazer a instalação do protractor podemos seguir a documentação oficial da ferramenta &lt;a href="https://www.protractortest.org/#/" rel="noopener noreferrer"&gt;neste link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dito isso vamos entender um pouco sobre como funciona a sua estrutura.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;e2e
├── protractor.conf.js
├── src
│   └── home
│       └── signin
│           ├── signin.e2e-spec.ts
│           └── signin.po.ts
└── tsconfig.e2e.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Dentro do diretório e2e temos o arquivo de configuração do protractor. É nele que vamos colocar todo o tipo de configuração que utilizaremos em nossos testes, como, por exemplo, o browser, a url padrão que acessaremos, a pasta na qual estão nossos testes e etc.&lt;/li&gt;
&lt;li&gt;Dentro do diretório home temos o componente que será testado no caso o &lt;strong&gt;signin&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Dentro de signin temos os arquivos:

&lt;ul&gt;
&lt;li&gt;signin.e2e-spec - Arquivo onde temos os testes de signin.&lt;/li&gt;
&lt;li&gt;signin.po - Arquivo onde iremos ter os métodos que iram utilizar a api do protractor.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Ex:  signin.po&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;protractor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SigninPage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;acessarPaginaHome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro deste pequeno exemplo importamos de dentro de protractor o método &lt;strong&gt;browser,&lt;/strong&gt; com isso exportamos uma class chamada &lt;strong&gt;SigninPage&lt;/strong&gt; por exemplo *&lt;strong&gt;*e dentro dela temos um pequeno método **acessarPaginaHome,&lt;/strong&gt; dentro do método &lt;strong&gt;acessarPaginaHome&lt;/strong&gt; &lt;strong&gt;iremos utilizar a função **get&lt;/strong&gt; de &lt;strong&gt;browser&lt;/strong&gt; para que possamos acessar uma rota informada.&lt;/p&gt;

&lt;p&gt;Neste exemplo foi apenas passada uma string vazia, pois dentro do arquivo &lt;strong&gt;protractor.conf.js&lt;/strong&gt; onde temos toda a configuração da ferramenta temos definido a url padrão do nosso projeto.&lt;/p&gt;

&lt;p&gt;Agora dentro do arquivo &lt;em&gt;signin.e2e-spec&lt;/em&gt;  temos o seguinte conteúdo:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ex: signin.e2e-spec&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SigninPage&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./signin.po&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Testando a tela home&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="na"&gt;signinPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SigninPage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;beforeEach&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;signinPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SigninPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Deve acessar a página Home&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signinPage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;acessarPaginaHome&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;toBeNull&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Describe
&lt;/h3&gt;

&lt;p&gt;Primeiramente fazemos o import da classe &lt;strong&gt;SigninPage&lt;/strong&gt; do arquivo &lt;em&gt;signin.po&lt;/em&gt;  como já vimos antes e utilizamos a função &lt;strong&gt;describe&lt;/strong&gt; que define uma suíte de testes, passando como primeiro parâmetro uma &lt;strong&gt;descrição&lt;/strong&gt; e o segundo parâmetro é um &lt;strong&gt;callback&lt;/strong&gt; onde vão ter os testes.&lt;/p&gt;

&lt;p&gt;Primeiramente definimos uma variável do signinPage do &lt;strong&gt;SigninPage&lt;/strong&gt; a classe onde teremos os métodos para a utilização do protractor.&lt;/p&gt;

&lt;p&gt;Em seguida temos a função &lt;strong&gt;beforeEach&lt;/strong&gt;  onde estamos definido que antes de rodar os nossos testes queremos ter uma instância de signinPage.&lt;/p&gt;

&lt;p&gt;A função &lt;strong&gt;it&lt;/strong&gt;  é o teste em si, que vai ser executado. Ele recebe dois parâmetros também, uma &lt;strong&gt;descrição&lt;/strong&gt; do teste e um &lt;strong&gt;callback&lt;/strong&gt;. E dentro da função &lt;strong&gt;it&lt;/strong&gt;  temos o nosso primeiro teste &lt;/p&gt;

&lt;p&gt;Describe, it, são funções referentes ao &lt;strong&gt;Jasmine&lt;/strong&gt; que &lt;strong&gt;é um framework de testes JavaScript baseado na metodologia de desenvolvimento guiado por comportamento&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O Jasmine conta com seu próprio script de execução de testes&lt;/strong&gt;, que utiliza uma página web para exibir os resultados dos testes executados, o desenvolvedor só precisa se preocupar em referenciar na página os scripts de dependências para execução dos testes, os scripts de testes e as implementações a serem testadas. A utilização deste script é bem simples e pode ser encontrado na documentação da ferramenta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rodando os testes 😎
&lt;/h2&gt;

&lt;p&gt;Agora dentro da sua aplicação iremos rodar o comando &lt;code&gt;webdriver-manager start&lt;/code&gt;  que irá executar o Selenium na porta 4444 e dentro do nosso projeto angular você pode rodar o comando &lt;code&gt;ng e2e&lt;/code&gt; que o angular irá cuidar de rodar todos os testes dentro de sua aplicação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Testando a tela home
✓ Deve acessar a pagina Home

Executed 1 of 1 spec SUCCESS &lt;span class="k"&gt;in &lt;/span&gt;1 sec.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, o nosso primeiro teste rodando..👨‍💻&lt;/p&gt;

&lt;p&gt;Links e referências:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jasmine*:* &lt;a href="https://jasmine.github.io/" rel="noopener noreferrer"&gt;&lt;em&gt;https://jasmine.github.io/&lt;/em&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Protractor: &lt;a href="https://www.protractortest.org/#/" rel="noopener noreferrer"&gt;https://www.protractortest.org/#/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>writing</category>
      <category>discuss</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
