Testing
Testes unitários ajudam a manter o código limpo, tal como, eu inclui algumas recomendações de fundamentos para testes unitários com links para mais informações.
Escreva testes com Histórias (Stories)
Escreva um grupo de testes para cada história. Comece com um teste em branco e preencha-o conforme você for escrevendo o código para a história.
Por que? Escrevendo uma descrição de teste te ajudará a definir claramente o que a sua história vai fazer ou não vai fazer e como você poderá mensurar o sucesso.
it('should have Avengers controller', function() { //TODO }); it('should find 1 Avenger when filtered by name', function() { //TODO }); it('should have 10 Avengers', function() {} //TODO (mock data?) }); it('should return Avengers via XHR', function() {} //TODO ($httpBackend?) }); // and so on
Frameworks para Testes
Para teste unitários use Jasmine ou Mocha.
Por que? Ambos, Jasmine e Mocha são amplamente utilizados na comunidade AngularJS. Ambos são estáveis, são mantidos e provém features de teste robustas.
Nota: Se escolher Mocha, também considere a escolha de uma Assert Library como Chai.
Test Runner
Use Karma como seu test runner.
Por que? Karma é fácil de configurar para executar apenas uma vez ou automaticamente enquanto você altera seu código.
Por que? Karma se integra facilmente com seu processo de Integração Contínua ou através do Grunt ou Gulp.
Por que? Algumas IDE's estão começando a se integrar com o Karma, como WebStorm e Visual Studio.
Por que? Karma funciona muito bem com os líderes de automação de tarefas, como Grunt (com grunt-karma) e Gulp (com gulp-karma).
Stubbing e Spying
Utilize Sinon para stubbing e spying.
Por que? Sinon funciona bem tanto com Jasmine quanto com Mocha e amplia as features de stubbing e spying que eles oferecem.
Por que? Sinon faz ficar mais fácil alternar entre Jasmine e Mocha, se você quiser tentar ambos.
Headless Browser
Use PhantomJS para executar seus testes no servidor.
Por que? PhantomJS é um headless browser que executa os testes sem um navegador "visual". Ou seja, você não precisa instalar Chrome, Safari, IE ou outros navegadores no seu servidor.
Nota: Você deve continuar testando em todos os navegadores em seu ambiente, conforme apropriado para seu público alvo.
Análise de Código
Execute JSHint no seus testes.
Por que? Testes são códigos. O JSHint ajuda a identificar problemas de qualidade de código que podem fazer com que o teste execute de maneira errada.
Ignore algumas regras globais do JSHint no seus testes
Faça com que as regras de teste permitam globais comuns, tais como
describe
eexpect
.Por que? Seus testes são codigos e como tal necessitam da mesma atenção e regras de qualidade que todo o seu código de produção. No entanto, as variáveis globais usadas pelo framework de teste, por exemplo, podem ser ignoradas para que você as utilize em seus testes.
/* global sinon, describe, it, afterEach, beforeEach, expect, inject */