Pular para o conteúdo principal
Versão: v2.x.x

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