< Insights

Karma js: O que é, por que e como utilizar para automatizar seus testes

  • Testes Automatizados
  • Artigo

Bom, pra começar, é sempre indicado que empresas de desenvolvimento de software utilizem boas práticas de desenvolvimento de testes para suas aplicações. Para isso, é necessário conhecer e dominar ferramentas dessa área para produzir código de qualidade e ter resultados mais produtivos. 

A boa notícia é que existe uma grande variedade de frameworks e ferramentas para viabilizar a execução dos seus testes. Por exemplo, considerando uma aplicação AngularJS, você pode utilizar o framework Jasmine em conjunto com a ferramenta de execução de JavaScript, o Karma JS.

Para saber mais sobre essa ferramenta, como ela funciona e por quê utilizá-la, continue a leitura desse artigo.

O que é Karma JS?

A definição do que é Karma JS do repositório oficial da ferramenta, diz: “ferramenta simples que permite executar códigos JavaScript em vários navegadores reais”; com objetivo de tornar o desenvolvimento orientado a testes mais fácil e rápido.

Apesar de ser uma ferramenta associada ao AngularJS por maior parte, devido o seu desenvolvimento ser iniciado pela equipe do AngularJS, essa ferramenta também pode ser utilizada para executar aplicações de JavaScript comuns, respeitando seus requisitos para funcionamento.

O que não é Karma Js?

Como o Karma JS é apenas o executor, é necessário padrões de códigos de teste para executar na ferramenta. Nesse caso, podemos citar alguns frameworks utilizados, como: Jasmine, QUnit e Mocha.

Jasmine

Primeiro lançamento em agosto de 2009, esse framework é uma biblioteca de testes JavaScript de código aberto, com uma sintaxe limpa e óbvia, facilitando o desenvolvimento de testes. O objetivo é a execução em qualquer plataforma habilitada ao JavaScript.

Mocha 

Conforme a documentação oficial, o Mocha é uma estrutura de teste JavaScript com foco em execução em navegadores e Node JS, com objetivo de facilitar testes assíncronos. Os testes são executados em série, permitindo relatórios flexíveis e precisos.

QUnit

É um framework de testes JavaScript, que conforme a documentação oficial, foi originalmente desenvolvido para o projeto jQuery e desde então evoluiu para ser uma dependência de outras bibliotecas e aplicativos JavaScript modernos, por exemplo: o ecossistema de estrutura de testes padrão para o Ember.js.

Por que usar o Karma Js?

Mas, por que usar o Karma Js? O que ele vai facilitar, já que você ainda precisaria de uma estrutura de teste? Qual é o valor agregado pelo Karma? O principal ponto de venda do Karma é a capacidade de executar testes em navegadores e dispositivos reais, o que torna sua estratégia de teste mais consistente e confiável. 

Como diferentes navegadores podem ter diferentes implementações de DOM, testar em todos eles – ou pelo menos na maioria dos principais – é fundamental se você quiser garantir que o comportamento de seu aplicativo seja adequado para a maioria de seus usuários. 

Inclusive, nos dias de hoje, além de muitos navegadores disponíveis, também existe uma variedade de plataformas, como: telefones, tablets, computadores, etc. Assim, o Karma Js também permite integrações com plugins de virtualização, permitindo que você execute testes simulando esses dispositivos. 

Essa ferramenta também facilita a execução contínua de seus testes sem sair do terminal ou IDEs para os desenvolvedores, já que pode executar novamente os testes sempre que os arquivos forem alterados.

Como o Karma Js funciona?

Conforme a configuração do plugin utilizada no Karma JS pelo seu framework, deve ser esperado os seguintes passos para uma correta execução dos testes:

●   Iniciar um servidor web e servir sua fonte JavaScript e cenários de teste;

●   Carregar todos os arquivos de origem e de teste conforme configuração designada;

●   Por fim, o Karma JS  ativa os navegadores configurados para executar os testes.

Além dessa função principal utilizada no Karma JS, existem outras configurações de plugin utilizadas por demais frameworks e códigos JavaScripts. Por exemplo, para publicar a cobertura de teste de código em coveralls.io, transformar um código do formato es6 para es5, agrupando vários arquivos em um único arquivo e gerando mapas de origem.

Quais são os benefícios do Karma Js?

Existem vários benefícios da utilização do Karma JS como provedor de execução dos seus testes, podemos citar alguns, como:

Testes em dispositivos reais

Você pode executar código JavaScript em vários navegadores e plataformas de sua escolha, como desktops, telefones, tablets, conforme o plugin utilizado, possibilitando até a virtualização dos mesmos. Os navegadores disponíveis incluem Firefox, Chrome e Chrome Canary, Opera, Safari, IE, PhantomJS, SauceLabs, BrowserStack entre outros.

Criar um ambiente produtivo

O Karma possibilita um ambiente de testes produtivo para os desenvolvedores, otimizando o tempo de verificação de vários dispositivos no momento da execução dos testes de front-end, por exemplo. Além disso, o Karma JS proporciona que o feedback dos testes seja instantâneo, tornando a redação de testes mais produtiva e rápida. 

Observa todos os arquivos

Essa ferramenta pode ser instruída a observar todos os arquivos, especificados no arquivo de configuração. Sempre que as alterações são adicionadas e salvas no arquivo, todos os navegadores capturados são acionados para executar o código de teste novamente.

É confiável e simples

O Karma possui várias possibilidades de configuração pois pode ser usado em conjunto com linguagens, ferramentas, frameworks, além de ser simples  a execução em conjunto com elas, ou seja,  seus testes podem ser executados em um servidor de integração contínua por exemplo, na documentação oficial do Karma possui uma seção para integração com o Jenkins CI com passos e requisitos para funcionamento, possibilitando a automatização dos seus testes.

Integrado a outros pacotes

O Karma pode ser facilmente integrado a pacotes como Jenkins, Travis e Semaphore.

Quando usar o Karma JS?

O Karma JS pode ser utilizado  quando há a necessidade de testar ferramentas criadas a partir do AngularJS ou qualquer outro projeto JavaScript. O Karma executa os cenários de testes dos frameworks mais utilizados no JavaScript (Jasmine, Mocha, QUnit, etc.).

A execução dos testes, pode ser feita tanto em navegadores de sua escolha, mas também em plataformas  por virtualização (desktop, telefone, tablet.) O Karma é altamente configurável, integra-se com pacotes populares de integração contínua (Jenkins, Travis e Semaphore) e possui excelente suporte a plugins.

Como usar o Karma Js?

Para começar com o Karma, você precisa entender o NodeJS e o gerenciador de pacotes NPM. 

O NodeJS, conforme a documentação oficial, é um runtime JavaScript assíncrono orientado a eventos, no qual foi projetado para criar aplicativos de rede escaláveis. O NPM, gerenciador de pacotes utilizado para Node JS, facilita o compartilhamento e instalação de módulos para o código. 

Considerando um projeto AngularJS, mesmo um “Hello World”, quando é executado os passos via NPM para instalação e criação do projeto Angular, ele já tem de forma intrínseca a instalação do Karma JS para execução dos testes, ou seja, já possui instruções e configurações para executar os testes pelo Karma JS. Agora, para utilizar em projetos que não possuem essa integração, será necessário instalar e configurar o Karma JS de forma direta, via instalação NPM e configurar conforme necessita o projeto, além de habilitar navegadores, e demais plugins para funcionamento. Depois de ajustar os pré-processadores, plugins, navegadores e arquivos, existem duas maneiras principais de executar o Karma JS para seus testes: na linha de comando ou por meio de sua IDE conforme o projeto. 

De uma forma bem simples, esperamos que você tenha entendido o que é o Karma Js e sua relação com os testes automatizados. A Objective aplica automação de testes há mais de 20 anos e presta consultoria para implantação. Quer saber mais? Entre em contato com nossos especialistas. 

Insights do nosso time

Obtenha insights do nosso time de especialistas sobre metodologias de desenvolvimento de software, linguagens, tecnologia e muito mais para apoiar o seu time na operação e estratégia de negócio.