Aguardando por Resultados Esperados
Semelhante ao assert
, mas em vez de retornar um erro na comparação, ele tentará novamente até obter sucesso ou exceder o tempo limite.
Espera até que conexões, serviços externos estejam prontos ou que um resultado específico de um método esteja disponível antes de iniciar os testes.
waitForExpectedResult
import { waitForExpectedResult } from 'poku';
await waitForExpectedResult(() => true, true, {
delay: 0,
interval: 100,
timeout: 60000,
strict: false,
});
Options
export type WaitForExpectedResultOptions = {
/**
* Intervalo de repetição em milissegundos
*
* ---
*
* @default 100
*/
interval?: number;
/**
* Tempo limite em milissegundos
*
* ---
*
* @default 60000
*/
timeout?: number;
/**
* Atrasa o início e o fim pelo número definido de milissegundos.
*
* ---
*
* @default 0
*/
delay?: number;
/**
* Garante comparações estritas.
*
* - Para usuários do **Bun**, essa opção não é necessária.
*
* ---
*
* @default false
*/
strict?: boolean;
};
Exemplos
Aguardando até a conexão com o banco de dados retornar true
:
import { waitForExpectedResult } from 'poku';
import { db } from './db.js';
await waitForExpectedResult(() => db.connect(), true);
// await waitForExpectedResult(async () => await db.connect(), true);
Aguardando até que a conexão com o banco de dados não lance uma exceção:
import { waitForExpectedResult } from 'poku';
import { db } from './db.js';
await waitForExpectedResult(async () => {
try {
await db.connect();
return true;
} catch {}
}, true);
Aguardando por uma conexão com o banco de dados de um contêiner antes de executar toda a suíte de testes e parando o contêiner ao finalizar:
Exemplo de API do Poku.
import { poku, docker, waitForExpectedResult, exit } from 'poku';
import { db } from './db.js';
// Carrega o docker-compose.yml
const compose = docker.compose();
// Inicia o contêiner
await compose.up();
// Aguardando pelo banco de dados
await waitForExpectedResult(async () => {
try {
await db.connect();
return true;
} catch {}
}, true);
// Inicia a suíte de testes
const result = await poku('./test/integration', {
noExit: true,
});
// Finaliza o contêiner
await compose.down();
// Mostra os resultados dos testes e encerra o processo com o código de sa ída dos testes.
exit(result);
Então:
node run.test.js
npx tsx run.test.ts