AngularJS: Criando testes com Jasmine e Karma

Antes de mais nada é importante que você leia o artigo Jasmine: Primeiro contato com testes unitários, caso ainda não saiba o que é Jasmine.

Dependências

Escrevendo testes

É bem simples, é importante que você utilize o beforeEach() do Jasmine, o module e o inject do angular-mocks, e o $injector do próprio angular para carregar todas as dependências necessárias.

Veja um simples exemplo em que eu carrego um serviço de dentro de um módulo:

describe(‘app module’, function () {
var User;

beforeEach(module(‘app’));

beforeEach(inject(function ($injector) {
User = $injector.get(‘User’);
}));

it(‘should have a User service’, function () {
expect(typeof User.$get).toEqual(‘function’);
});
});
Vejam que na linha 4 nós carregamos o módulo, é importante lembrar que caso este módulo utilize serviços de um outro módulo, ele terá que ser carregado também, basta adicionar abaixo do beforeEach em que carregamos o módulo principal e o seu problema estará resolvido.

Na linha 6, nós injetamos através do inject o $injector na função, o inject pode ser utilizado em qualquer lugar do seu teste. A partir daí você poderá importar o $compile caso queira compilar diretivas no DOM, o $rootScope caso queira criar um $scope para compilar as diretivas.

Rodando seus testes com o Karma Runner

Instalando o Karma

Você deve instalar o Karma via npm globalmente:

npm instal -g karma

E localmente no seu projeto (ou ele não irá funcionar):

npm install –save-dev karma

Criando um arquivo de configuração do Karma

É algo simplesmente simples (?) e rápido! Vá até a pasta raiz do seu projeto e digite:

karma init

Preencha todas as perguntas e BUM, você tem um arquivo de configuração do Karma.

Rodando os testes com o Karma

Mais uma das maravilhas do CLI do Karma:

karma start –no-single-run –log-level debug

Você pode trocar o parâmetro –no-single-run por –single-run , e ele não ficará assistindo as mudanças que ocorrerão nos seus arquivos para reiniciar os testes, inclusive é importante deixar que o padrão seja –single-run para caso tenha planos de usar algum sistema de Continuous Integration, caso contrário, ele pode retornar como se os testes estivessem falhados quando ele apenas parou os testes para assistir as mudanças dos arquivos.

Finalização e dicas

Tenha em mente de que você terá que configurar o seu arquivo de configuração do Karma (geralmente karma.conf.js, localizado na pasta raiz do seu projeto) para carregar o angular e o angular-mocks, e todos os outros assets que você carrega para fazer seus módulos funcionarem corretamente, é claro.

O seu arquivo de testes deve ser parecido com o do exemplo acima, e qualquer dúvida você pode ler a documentação do angular-mocks OU pode vir aqui e deixar o seu comentário e eu terei um imenso prazer em lhe responder.

Quaisquer dúvidas, deixem abaixo nos comentários ou enviem-me e-mails, um abraço e até a próxima!