Adicionado documentação dos componentes de Vitruvio.
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user