Karma é uma ferramenta que gera um servidor Web que executa o código de teste para cada um dos navegadores conectados. O quão é necessário se criar testes para um desenvolvedor? Muito necessário. O KarmaJS está aqui para simplificar isso.
Things should be simple. We believe in testing and so we want to make it as simple as possible.
The main goal for Karma is to bring a productive testing environment to developers. The environment being one where they don't have to set up loads of configurations, but rather a place where developers can just write the code and get instant feedback from their tests. Because getting quick feedback is what makes you productive and creative. -- KarmaJS
- KarmaJS >
Instalação
Precisamos primeiramente ter o NodeJS e NPM, instalados.
Podendo ser baixado, aqui: NodeJS com NPM
Agora que já temos o NodeJS e NPM, instalados. Temos que instalar o KarmaJS
via terminal:
npm install -g karma-cli
Para instalar o KarmaJS
e os plugins no projeto. Basta ter o package.json
e executar os comandos:
npm install karma --save-dev
Para ter o karma como dependência de desenvolvimento.
npm install karma-jasmine karma-chrome-launcher --save-dev
Como exemplo, acima estaremos instalando os plugins para o jasmine
e o lançador do chrome
.
Configuração
Agora que temos o KarmaJS
e os plugins instalados, precisamos ir para a parte de configuração.
Para gerar o arquivo de configuração do Karma
, precisamos do comando:
karma init
Ao executar o comando, aparecerá as perguntas para ser montado o arquivo de configuração.
Which testing framework do you want to use ?
Press tab to list possible options. Enter to move to the next question.
> jasmine
Do you want to use Require.js ?
This will add Require.js plugin.
Press tab to list possible options. Enter to move to the next question.
> no
Do you want to capture any browsers automatically ?
Press tab to list possible options. Enter empty string to move to the next question.
> Chrome
What is the location of your source and test files ?
You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js".
Enter empty string to move to the next question.
>
Should any of the files included by the previous patterns be excluded ?
You can use glob patterns, eg. "**/*.swp".
Enter empty string to move to the next question.
>
Do you want Karma to watch all the files and run the tests on change ?
Press tab to list possible options.
> yes
Config file generated at "[diretorio]\karma.conf.js".
Após responder as perguntas, será gerado o arquivo karma.conf.js
. Para esse exemplo, as sugestões me atendem, então foi só apertar enter
, direto.
O nosso arquivo de configuração está de acordo com os plugins que foram instalados inicialmente. Para os testes, usaremos o jasmine
e os mesmos rodarão no navegador 'chrome', na porta 9876 (http://localhost:9876).
Execução
Para executar o que foi configurado, precisamos do comando:
karma start
Mesmo não tendo nenhum arquivo para ser testado, executando o comando, já poderá ver em ação o que foi configurado.
Para um exemplo mais prático, vamos criar o arquivo test.js
, com o código:
describe("Exemplo", function() {
it("verdadero", function() {
expect(true).toBe(true);
});
it("falso", function() {
expect(false).not.toBe(true);
});
});
No arquivo karma.conf.js
, vamos acrescentar o caminho do arquivo, para ser identificado.
files: [
'./*.js'
],
Pronto, como um código simples de um teste feito com o jasmine
, agora é só executar o karma start
.
No terminal, aparecerá a seguinte mensagem:
Chrome 47.0.2526 (Windows 7 0.0.0): Executed 2 of 2 SUCCESS (0.018 secs / 0.003 secs)
E assim, temos o primeiro teste rodando de acordo com a nossa configuração, de uma forma bem rápida e simples.
Conclusão
Não se pode ter desculpas para não criar testes para o seu código. Além de assegurar a integridade, previne muitas dores de cabeça e falhas que não podem fazer parte do dia a dia de um bom desenvolvedor. Todo ser humano é falho, então vamos deixar nas mãos da tecnologia a última avaliação do seu código. O bom desenvolvedor é ciente de que pode haver bugs
e que testes, além de ajudar, evita transtornos para o cliente. Afinal, ninguém quer perder dinheiro. Ainda mais se poderia ser evitado.