Adicionado documentação dos componentes de Vitruvio.

This commit is contained in:
victor
2026-05-14 11:32:24 -03:00
parent dbe669d03e
commit 7410422af7
79 changed files with 8180 additions and 0 deletions
+145
View File
@@ -0,0 +1,145 @@
# 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](../Libs/vitruvio_test.js).
Ela expoe tres formas de execucao:
1. `executarSuitePorSigla(siglaSuite, manifest)`
2. `executarSuitesPorSigla(siglas, manifest)`
3. `executarRotinaPorSigla(siglaRotina, metodoRegistro, manifest)`
## Modelo recomendado
1. A rotina real fica na lib produtiva.
2. Os testes ficam em outra lib, separados por funcionalidade.
3. 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](../Libs/test_nfse_relatorio.js)
```javascript
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`.
```javascript
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
```javascript
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
```javascript
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](../Libs/test_nfse_relatorio.js), separada da lib produtiva.
Tambem foram adicionados helpers testaveis em [Vitruvio/Libs/lib_nfse.js](../Libs/lib_nfse.js):
1. `criarDependenciasRelatorioPainel(dependencias)`
2. `montarNomeArquivoRelatorio(nomeBase, dependencias)`
3. `abrirRelatorioPainel(itemId, dependencias)`
Isso permite testar a funcionalidade de Relatorio do painel sem acoplar o teste ao XML.
## Matchers e spies disponiveis
Matchers:
1. `toBe`
2. `toEqual`
3. `toBeTruthy`
4. `toBeFalsy`
5. `toContain`
6. `toHaveLength`
7. `toThrow`
8. `toHaveBeenCalled`
9. `toHaveBeenCalledTimes`
10. `toHaveBeenCalledWith`
11. `not`
Spies:
1. `runner.fn()`
2. `runner.spy(nome, implementacao)`
3. `runner.spyOn(obj, metodo)`
## Recomendacao pratica
1. deixe o XML fino
2. mova a regra para uma lib
3. injete dependencias quando a funcionalidade falar com `engine`, `downloadutil`, `vReportService`, `db` ou outros servicos
4. mantenha suites separadas por funcionalidade quando a rotina crescer
5. rode testes por botao temporario, initScript controlado ou painel de homologacao