Introdução ao teste de unidade AngularJS
Usando o AngularJS, você pode criar interfaces de usuário incríveis, mas quando a complexidade do seu projeto aumenta, o teste de unidade se torna uma parte importante. Para melhorar a qualidade do seu código, o teste é muito importante. No teste de unidade, testamos uma funcionalidade de componente isoladamente, sem nenhum recurso externo, como banco de dados, arquivos, etc. Os testes de unidade são fáceis de escrever e mais rápidos na execução. Nos testes de unidade, não testamos a funcionalidade de um aplicativo, portanto, baixa confiança. O AngularJS consiste em vários blocos de construção, como serviços, componentes, diretivas, etc. Para cada um deles, precisamos escrever casos de teste separados.
Fundamentos do teste de unidade
- Precisamos seguir práticas de codificação limpas.
- Aplique os mesmos princípios que o código funcional.
- Os casos de teste são uma pequena função / método de 10 linhas ou menos.
- Use uma convenção de nomenclatura adequada.
- Eles têm apenas uma única responsabilidade, ou seja, testam apenas uma coisa.
Ferramentas de teste do AngularJS
1) Jasmim
Estrutura de desenvolvimento para testar o código javascript. Ele fornece funções que ajudam na estruturação de casos de teste. À medida que os projetos se tornam complexos e os testes crescem, é importante mantê-los bem estruturados e documentados, e o Jasmine ajuda a conseguir isso. Para usar o Jasmine com Karma, use o corredor de teste karma-jasmine.
2) Karma
Um corredor de teste para escrever e executar testes de unidade durante o desenvolvimento do aplicativo AngularJS. Aumenta a produtividade dos desenvolvedores. Gerará um servidor da Web que carrega o código do aplicativo e executa os casos de teste.
É um aplicativo NodeJS instalado através do npm / yarn. Ele pode ser configurado para ser executado em vários navegadores para garantir que o aplicativo funcione em todos os navegadores disponíveis.
3) Zombarias angulares
O AngularJS fornece o módulo ngMock, que nos fornece testes simulados. Eles são usados para injetar e simular serviços do AngularJS em testes de unidade.
Configuração do ambiente
- Instale o NodeJS no seu sistema. (https://nodejs.org/en/download/).
- Instale qualquer IDE (como código VS, colchetes, etc.).
- Crie uma pasta vazia ($ mkdir unit testing) em seu diretório.
- Abra a pasta de teste de unidade no seu IDE. Em seguida, abra o terminal (prompt de comando) dentro da pasta de testes da unidade.
- No terminal, siga os comandos abaixo, um por um:
Crie o package.json:
npm initInstall Angular:
npm i angular - saveInstall Karma:
npm i -g karma –save -devInstale o Jasmine:
npm i karma-jasmine jasmine-core –save -devInstalar zombarias angulares:
Instale o navegador Karma Chrome:
npm i karma-chrome-launcher - save-dev - Crie duas pastas nomeadas como aplicativo e teste dentro da pasta de teste da unidade.
- Crie karma.config.js. No terminal, dê o seguinte comando:
karma init
Ele fará um conjunto de perguntas. Selecione as respostas abaixo para isso.
-> Selecione a estrutura de teste como Jasmine.
-> Selecione Chrome como um navegador.
-> Especifique o caminho para seus arquivos js e spec (app / * js and tests / *. Spec.js)
-> Depois de mais algumas perguntas, isso será feito.
-> Abra arquivos karma.config.js, caminho e plugins, como mostrado abaixo. Abaixo está o arquivo karma.config.js.
// Karma configuration
module.exports = function(config) (
config.set((
// base path is used to resolve all patterns
basePath: '',
plugins:('karma-jasmine', 'karma-chrome-launcher'),
frameworks: ('jasmine'),
// list of files to load in the browser
files: (
'node_modules/angular/angular.js',
'node_modules/angular-mocks/angular-mocks.js',
'app/*.js',
'tests/*.spec.js'
),
// list of files to exclude
exclude: (),
preprocessors: (),
reporters: ('progress'),
// server port
port: 9876,
// enable / disable colors in output
colors: true,
logLevel: config.LOG_INFO,
// enable / disable watch mode for files
autoWatch: true,
browsers: ('Chrome'),
singleRun: false,
// how many browser should start simultaneous
concurrency: Infinity
))
)
A pasta estruturada após estas etapas deve ser como abaixo:
Exemplo com implementação
Testando um filtro
Filtros são métodos que alteram dados para um formato legível por humanos. Neste módulo, criaremos um filtro e escreveremos testes de unidade para esse filtro e verificaremos se está funcionando conforme o esperado.
Passos:
Crie um arquivo chamado filter.js na pasta do aplicativo.
filter.js
angular.module('MyApp', ())
.filter('compute', (function()(
return function(number)(
if(number<0)(
return 0;
)
return number+1;
)
)))
Agora, vamos escrever os casos de teste de unidade para verificar se o filtro está funcionando conforme o esperado ou não.
Métodos de estrutura do Jasmine
- Descrever (): define um conjunto de testes - um grupo de testes relacionados.
- It (): define uma especificação ou teste.
- Expect (): aceita um valor real como parâmetro e é encadeado com uma função de correspondência.
- Função Matcher: assume o valor esperado como parâmetros. É responsável por relatar ao Jasmine se a expectativa é verdadeira ou falsa.
Exemplo:
toBe ('valor'), toContain ('valor'), toEqual (12), toBeNull (), toBeTruthy (), toBeDefined ().
Crie um arquivo chamado filter.spec.js na pasta tests.
filter.spec.js
//1. Describe the object type
describe('Filters', function () (
//2. Load the Angular App
beforeEach(module('MyApp'));
//3. Describe the object by name
describe('compute', function () (
var compute;
//4. Initialize the filter
beforeEach(inject(function ($filter) (
compute = $filter('compute', ());
)));
//5. Write the test in the it block along with expectations.
it('Should return 0 if input is negative', function () (
const result = compute(-1);
expect(result).toBe(0); //pass
));
it('Should increment the input if input is positive', function () (
const result = compute(1);
expect(result).toBe(2);//pass
//expect(compute(3)).toBe(5);//fail
));
));
));
Para executar o teste, dê o comando abaixo no terminal da pasta de teste de unidade.
Começo do karma
ou você pode definir "karma start" no script de teste package.json e fornecer o comando abaixo.
teste npm
Isso abrirá o navegador Chrome.
Saída no terminal:
Testando um controlador e serviço
O AngularJS mantém a lógica separada da camada de visualização, facilitando o teste de controladores e serviços.
Passos:
1. Crie um arquivo chamado controller.js na pasta do aplicativo.
controller.js
var app = angular.module('Myapp', ())
app.service('calcService', (
function()(
function square(o1)(
return o1*o1;
)
return (square:square);
)
));
app.controller('MyController', function MyController($scope) (
$scope.title = "Hello MyController";
$scope.square = function() (
$scope.result = calcService.square($scope.number);
)
));
2. Crie um arquivo chamado controller.spec.js na pasta tests.
controller.spec.js
describe('MyController', function() (
var controller, scope;
beforeEach(angular.mock.module('Myapp'));
beforeEach(angular.mock.inject(function($rootScope, $controller) (
scope = $rootScope.$new();
controller = $controller('MyController', ( $scope : scope ));
)));
it('Title should be defined', inject(function ($rootScope, $controller) (
expect(scope.title).toBeDefined();
)));
it('Title as Hello MyController', inject(function ($rootScope, $controller) (
expect(scope.title).toEqual('Hello MyController');
)));
));
describe('square', function()(
var calcService;
beforeEach(function()(
module('Myapp');
inject( function($injector)(
calcService = $injector.get('calcService');
));
));
it('should square the number', function()(
var result = calcService.square(3);
expect(result).toBe(9);
));
));
Saída no terminal:
Conclusão
Os aplicativos AngularJS são compostos de módulos. No nível do aplicativo, esses são os módulos AngularJS. No nível do módulo, são serviços, fábricas, componentes, diretivas e filtros. Cada um deles é capaz de se comunicar através de sua interface externa. Escrever casos de teste de unidade para seu aplicativo AngularJS acelera seu processo de depuração e desenvolvimento.
Artigos recomendados
Este é um guia para o teste de unidade AngularJS. Aqui discutimos a introdução e os Fundamentos do teste de unidade, juntamente com as ferramentas de teste do AngularJS e o exemplo com a implementação. Você também pode consultar os seguintes artigos para saber mais -
- Carreira no AngularJS
- ReactJs vs AngularJs
- Aplicação JS angular
- Carreira no DevOps