Karma Test Runner

No post anterior mostrei um pouco sobre o Jasmine e rodamos os testes abrindo o SpecRunner.html no browser.

Esse processo acaba sendo um pouco desgastante pois temos que inserir os arquivos direto no HTML (source files e spec files) e executar os testes de forma manual, etc.

O Karma é uma ferramenta que pode nos auxiliar bastante nesse processo de executar os testes. Podemos inserir os arquivos de forma dinâmica e executar os testes automaticamente assim que os arquivos forem modificados, alem de rodar em vários browsers, etc.

Instalação

Como o Karma é uma ferramenta que roda no Node.js podemos fazer a instalação usando o NPM.

O primeiro passo é fazer a instalação do Karma no seu projeto e adicionar a referência no package.json.

1
npm install karma --save-dev

Como o Karma foi projetado para rodar testes em diversos frameworks (Jasmine, Mocha,…) e executar os testes em vários browsers (launchers) vamos instalar o plugin do Jasmine e do Chrome.
Você pode verificar a lista de launchers disponíveis.

1
npm install karma-jasmine karma-chrome-launcher --save-dev

Todas as dependências foram instaladas dentro de node_modules e o executável do Karma é o node_modules/karma/bin/karma. Para não ter que acessar a pasta sempre para rodar os testes podemos instalar o karma-cli (Commandline Interface) e assim rodar somente o comando Karma start na raiz do nosso projeto.

1
npm install -g karma-cli

Configuração

Toda configuração o Karma fica por padrão em um arquivo chamado karma.conf.
Com a instalação do karma-cli podemos criar esse arquivo facilmente rodando o comando karma init e respondendo algumas perguntas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ karma init

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 a browser 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.
> *.js
> test/**/*.js
>

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

Com o arquivo karma.conf gerado basta rodar o comandokarma start e verificar os testes.

PhantomJS

Em muitos casos queremos que os testes sejam executados somente no terminal sem que seja aberta a janela do browser.
Sendo assim basta instalar o karma-phantomjs-launcher e alterar o browser para PhantomJS

Até os próximos artigos!