Transferidor - Conceitos de teste de Javascript

Como o conhecimento de JavaScript é essencial para trabalhar com o Protractor, neste capítulo, vamos entender os conceitos de teste de JavaScript em detalhes.

Teste e automação de JavaScript

JavaScript é a linguagem de script interpretada e digitada dinamicamente mais popular, mas a tarefa mais desafiadora é testar o código. É porque, ao contrário de outras linguagens compiladas como JAVA e C ++, não há etapas de compilação em JavaScript que podem ajudar o testador a descobrir erros. Além disso, o teste baseado em navegador consome muito tempo; portanto, há a necessidade de ferramentas que ofereçam suporte a testes automatizados para JavaScript.

Conceitos de teste automatizado

É sempre uma boa prática escrever o teste porque torna o código melhor; o problema com o teste manual é que ele consome um pouco de tempo e está sujeito a erros. O processo de teste manual também é muito enfadonho para o programador, pois ele precisa repetir o processo, escrever especificações de teste, alterar o código e atualizar o navegador várias vezes. Além disso, o teste manual também retarda o processo de desenvolvimento.

Pelos motivos acima, é sempre útil ter algumas ferramentas que possam automatizar esses testes e ajudar os programadores a se livrar dessas etapas repetitivas e enfadonhas. O que um desenvolvedor deve fazer para automatizar o processo de teste?

Basicamente, um desenvolvedor pode implementar o conjunto de ferramentas no CLI (Command Line Interpreter) ou no IDE de desenvolvimento (Integrated development environment). Em seguida, esses testes serão executados continuamente em um processo separado, mesmo sem a entrada do desenvolvedor. O teste automatizado de JavaScript também não é novo e muitas ferramentas como Karma, Protractor, CasperJS etc. foram desenvolvidas.

Tipos de teste para JavaScript

Pode haver testes diferentes para finalidades diferentes. Por exemplo, alguns testes são escritos para verificar o comportamento das funções em um programa, enquanto outros são escritos para testar o fluxo de um módulo ou recurso. Assim, temos os seguintes dois tipos de teste -

Teste de Unidade

O teste é feito na menor parte testável do programa, chamada unidade. A unidade é basicamente testada de forma isolada sem qualquer tipo de dependência daquela unidade nas outras partes. No caso do JavaScript, o método ou função individual que possui um comportamento específico pode ser uma unidade de código e essas unidades de código devem ser testadas de forma isolada.

Uma das vantagens do teste de unidade é que o teste das unidades pode ser feito em qualquer ordem porque as unidades são independentes umas das outras. Outra vantagem do teste de unidade que realmente conta é que ele pode executar o teste a qualquer momento da seguinte maneira -

  • Desde o início do processo de desenvolvimento.
  • Depois de concluir o desenvolvimento de qualquer módulo / recurso.
  • Depois de modificar qualquer módulo / recurso.
  • Depois de adicionar qualquer novo recurso no aplicativo existente.

Para o teste de unidade automatizado de aplicativos JavaScript, podemos escolher entre muitas ferramentas e estruturas de teste, como Mocha, Jasmine e QUnit.

Teste de ponta a ponta

Pode ser definido como a metodologia de teste usada para testar se o fluxo do aplicativo do início ao fim (de uma extremidade a outra) está funcionando bem de acordo com o design.

O teste de ponta a ponta também é chamado de teste de função / fluxo. Ao contrário do teste de unidade, o teste de ponta a ponta testa como os componentes individuais funcionam juntos como um aplicativo. Esta é a principal diferença entre o teste de unidade e o teste de ponta a ponta.

Por exemplo, suponha que se temos um módulo de registro onde o usuário precisa fornecer algumas informações válidas para completar o registro, então o teste E2E para esse módulo específico seguirá as seguintes etapas para completar o teste -

  • Primeiro, ele irá carregar / compilar o formulário ou módulo.
  • Agora, ele obterá o DOM (modelo de objeto de documento) dos elementos do formulário.
  • Em seguida, acione o evento click do botão enviar para verificar se está funcionando ou não.
  • Agora, para fins de validação, colete o valor dos campos de entrada.
  • Em seguida, os campos de entrada devem ser validados.
  • Para fins de teste, chame uma API falsa para armazenar os dados.

Cada etapa dá seus próprios resultados que serão comparados com o conjunto de resultados esperado.

Agora, a questão que se coloca é, embora esse tipo de teste E2E ou funcional também possa ser executado manualmente, por que precisamos de automação para isso? O principal motivo é que a automação tornará esse processo de teste fácil. Algumas das ferramentas disponíveis que podem ser facilmente integradas com qualquer aplicativo, para isso, são Selenium, PhantomJS e Transferidor.

Ferramentas e frameworks de teste

Temos várias ferramentas de teste e estruturas para teste Angular. A seguir estão algumas das ferramentas e estruturas conhecidas -

Carma

Karma, criado por Vojta Jina, é um executor de testes. Originalmente, esse projeto foi chamado de Testacular. Não é uma estrutura de teste, o que significa que nos dá a capacidade de executar testes de unidade JavaScript de maneira fácil e automática em navegadores reais. O Karma foi construído para o AngularJS porque antes do Karma não havia ferramenta de teste automatizada para desenvolvedores de JavaScript baseados na web. Por outro lado, com a automação fornecida pelo Karma, os desenvolvedores podem executar um único comando simples e determinar se um conjunto de testes inteiro foi aprovado ou reprovado.

Prós de usar Karma

A seguir estão alguns prós do uso do Karma em comparação com o processo manual -

  • Automatiza testes em vários navegadores e também em dispositivos.
  • Monitora arquivos em busca de erros e os corrige.
  • Fornece suporte e documentação online.
  • Facilita a integração com um servidor de integração contínua.

Contras do uso de Karma

A seguir estão alguns contras do uso de Karma -

A principal desvantagem de usar o Karma é que ele requer uma ferramenta adicional para configurar e manter.

Se você estiver usando o executor de teste Karma com Jasmine, haverá menos documentação disponível para encontrar informações sobre como configurar seu CSS no caso de ter vários ids para um elemento.

Jasmim

Jasmine, uma estrutura de desenvolvimento orientada por comportamento para testar o código JavaScript, é desenvolvida no Pivotal Labs. Antes do desenvolvimento ativo da estrutura Jasmine, uma estrutura de teste de unidade semelhante chamada JsUnit também foi desenvolvida pela Pivotal Labs, que possui um executor de teste integrado. Os testes de navegadores podem ser executados por meio de testes Jasmine incluindo o arquivo SpecRunner.html ou usando-o também como um executor de teste de linha de comando. Também pode ser usado com ou sem Karma.

Prós de usar Jasmine

A seguir estão alguns prós do uso do Jasmine -

  • Uma estrutura independente de navegador, plataforma e linguagem.

  • Oferece suporte ao desenvolvimento orientado a testes (TDD) junto com o desenvolvimento orientado a comportamento.

  • Possui integração padrão com Karma.

  • Sintaxe fácil de entender.

  • Fornece spies de teste, falsificações e funcionalidades de passagem que auxiliam no teste como funções adicionais.

Contras do uso de Jasmine

O seguinte é um contra de usar Jasmine -

  • Os testes devem ser retornados pelo usuário à medida que mudam, porque não há recurso de observação de arquivos disponível no Jasmine durante a execução do teste.

Mocha

Mocha, escrito para aplicativos Node.js, é uma estrutura de teste, mas também oferece suporte a testes de navegador. É bem parecido com o Jasmine, mas a principal diferença entre eles é que o Mocha precisa de algum plug-in e biblioteca porque não pode ser executado sozinho como uma estrutura de teste. Por outro lado, Jasmine é independente. No entanto, o Mocha é mais flexível de usar do que o Jasmine.

Prós de usar Mocha

A seguir estão alguns prós do uso do Mocha -

  • O Mocha é muito fácil de instalar e configurar.
  • Documentação simples e fácil de usar.
  • Contém plug-ins com vários projetos de nó.

Contras de usar Mocha

A seguir estão alguns contras do uso do Mocha -

  • Ele precisa de módulos separados para afirmações, espiões etc.
  • Também requer configuração adicional para uso com o Karma.

QUnit

O QUint, originalmente desenvolvido por John Resig em 2008 como parte do jQuery, é um conjunto de testes de unidade JavaScript poderoso e fácil de usar. Ele pode ser usado para testar qualquer código JavaScript genérico. Embora se concentre em testar o JavaScript no navegador, é muito conveniente para ser usado pelo desenvolvedor.

Prós de usar QUnit

A seguir estão alguns prós do uso do QUnit -

  • Fácil de instalar e configurar.
  • Documentação simples e fácil de usar.

Contras de usar QUnit

O seguinte é um contra de usar QUnit -

  • Ele foi desenvolvido principalmente para jQuery e, portanto, não é tão bom para uso com outros frameworks.

Selênio

Selenium, originalmente desenvolvido por Jason Huggins em 2004 como uma ferramenta interna da ThoughtWorks, é uma ferramenta de automação de teste de código aberto. Selenium se define como “Selenium automatiza navegadores. É isso aí!". Automação de navegadores significa que os desenvolvedores podem interagir com os navegadores muito facilmente.

Prós de usar Selenium

A seguir estão alguns prós do uso de selênio -

  • Contém um grande conjunto de recursos.
  • Suporta testes distribuídos.
  • Possui suporte SaaS por meio de serviços como Sauce Labs.
  • Fácil de usar com documentações simples e ricos recursos disponíveis.

Contras do uso de selênio

A seguir estão alguns contras do uso de Selenium -

  • A principal desvantagem do uso do Selenium é que ele deve ser executado como um processo separado.
  • A configuração é um pouco complicada, pois o desenvolvedor precisa seguir várias etapas.