3.8 KiB
3.8 KiB
Testes Vitruvio
Objetivo
Permitir testes tecnicos em Rhino ES5 usando libs do proprio Vitruvio, carregadas por libService.loadScript(...), sem depender de Node ou de arquivos fora do runtime da plataforma.
Lib principal
Use a lib Vitruvio/Libs/vitruvio_test.js.
Ela expoe tres formas de execucao:
executarSuitePorSigla(siglaSuite, manifest)executarSuitesPorSigla(siglas, manifest)executarRotinaPorSigla(siglaRotina, metodoRegistro, manifest)
Modelo recomendado
- A rotina real fica na lib produtiva.
- Os testes ficam em outra lib, separados por funcionalidade.
- O painel, processo ou formulario chama a lib de testes por sigla quando voce quiser validar.
Suite separada por sigla
Cada suite deve exportar registrar(runner, opcoes).
Exemplo real: Vitruvio/Libs/test_nfse_relatorio.js
function MinhaSuite() {
this.registrar = function (runner, opcoes) {
runner.describe('Minha funcionalidade', {
rotina: 'minha_rotina',
funcionalidade: 'fluxo_principal',
tags: ['smoke', 'unit']
}, function () {
runner.it('executa fluxo feliz', function () {
runner.expect(true).toBe(true);
});
});
};
}
module.exports = new MinhaSuite();
Testes na propria lib da rotina
Se preferir manter os testes na mesma lib da rotina, exponha um metodo como registrarTestes.
function MinhaRotina() {
this.executar = function () {
};
this.registrarTestes = function (runner) {
runner.describe('MinhaRotina', {
rotina: 'minha_rotina',
funcionalidade: 'validacao_basica',
tags: ['unit']
}, function () {
runner.it('valida comportamento basico', function () {
runner.expect(1).toBe(1);
});
});
};
}
module.exports = new MinhaRotina();
Como rodar em painel, initScript ou processo
Rodando uma suite separada
importClass(Packages.br.com.davinti.base.vaadin.components.layout.MessageBox);
function run() {
var vt = libService.loadScript('vitruvio_test');
var report = vt.executarSuitePorSigla('test_nfse_relatorio', {
tags: ['smoke'],
funcionalidades: ['acao_relatorio'],
failFast: true,
contexto: {
itemId: 98765
}
});
MessageBox.show('Resultado dos testes', vt.formatarRelatorio(report));
}
Rodando testes da propria rotina
var vt = libService.loadScript('vitruvio_test');
var report = vt.executarRotinaPorSigla('minha_rotina', 'registrarTestes', {
tags: ['unit']
});
println(vt.formatarRelatorio(report));
Exemplo com NFSe
Foi adicionada a suite Vitruvio/Libs/test_nfse_relatorio.js, separada da lib produtiva.
Tambem foram adicionados helpers testaveis em Vitruvio/Libs/lib_nfse.js:
criarDependenciasRelatorioPainel(dependencias)montarNomeArquivoRelatorio(nomeBase, dependencias)abrirRelatorioPainel(itemId, dependencias)
Isso permite testar a funcionalidade de Relatorio do painel sem acoplar o teste ao XML.
Matchers e spies disponiveis
Matchers:
toBetoEqualtoBeTruthytoBeFalsytoContaintoHaveLengthtoThrowtoHaveBeenCalledtoHaveBeenCalledTimestoHaveBeenCalledWithnot
Spies:
runner.fn()runner.spy(nome, implementacao)runner.spyOn(obj, metodo)
Recomendacao pratica
- deixe o XML fino
- mova a regra para uma lib
- injete dependencias quando a funcionalidade falar com
engine,downloadutil,vReportService,dbou outros servicos - mantenha suites separadas por funcionalidade quando a rotina crescer
- rode testes por botao temporario, initScript controlado ou painel de homologacao