Início rápido para configurar testes com angular, karma e jasmim. Siga este guia
Pacotes
Primeiro instale globalmente os pacotes de teste relevantes
npm install -g karma jasmine-node phantomjs
- karma é o corredor de teste
- jasmim é a estrutura de teste
- phantomjs permite o teste sem abrir um navegador real
USUÁRIOS NVM
Se você for um usuário nvm, precisará configurar uma variável de ambiente para o binário phantomJs. Minha solução foi adicionar o seguinte ao final do meu ~ / .zshrc (deve funcionar para ~ / .bashrc)
export PHANTOMJS_BIN=$NVM_BIN"/phantomjs"
Configuração
Crie um diretório para todas as nossas configurações de teste
mkdir configs
Crie um diretório para nossos testes de unidade
mkdir -p test/unit
Obtenha todos os arquivos angulares
mkdir -p {public/app,test}/lib/angular
curl http://code.angularjs.org/1.0.7/angular.min.js > public/app/lib/angular/angular.min.js
curl http://code.angularjs.org/1.0.7/angular-mocks.js > test/lib/angular/angular-mocks.js
Então precisamos gerar um script de configuração de karma para nossos testes de unidade
karma init configs/karma.conf.js
Você receberá um monte de perguntas que você precisará responder como esta
- framework de teste: jasmine (padrão)
- require.js: no (padrão)
- Navegador: PhantomJS (pressione tab para percorrer as opções)
- arquivos para testar
- public / app / lib / angular / angular.min.js
- test / lib / angular / angular-mocks.js
- public / app / *. js
- test / unit / * Spec.js
- Relógio testacular: sim
Então podemos começar a monitorar o carma para nossos testes
karma start configs/karma.conf.js
Agora estamos prontos para criar nossa primeira classe de teste
test / unit / controllerSpec.js
'use strict';
describe('IndexController', function() {
//initialise module
beforeEach(module('myapp.controllers'));
//params initialised in scope for tests
var ctrl, scope;
beforeEach(inject(function($controller) {
//get controller from $controller provider
scope = {};
ctrl = $controller('IndexController', {
$scope: scope
});
}));
it ('should add name parameter to scope', function() {
expect(scope.name).toBeDefined();
});
});
Depois de salvar esse arquivo, devemos ver o arquivo controllerSpec.js sendo pego pelo karma e adicionado ao conjunto de testes. Deve começar a falhar, pois o escopo não tem elemento de nome
Para fazer o teste passar, abra public / app / controllers.js, adicione o seguinte ao IndexController
$scope.name = 'bob';
e você verá o relatório de carma que os testes passam.