Executando testes em plataformas específicas
Primeiro, vamos entender o que cada definição faz:
npx poku
- Tenta identificar a plataforma ou executá-la no Node.js por padrão.
npx poku --node
- Chama o Poku através do Node.js e executa todos os testes usando o Node.js.
npx poku --bun
- Chama o Poku através do Node.js, mas executa todos os testes usando o Bun.
npx poku --deno
- Chama o Poku através do Node.js, mas executa todos os testes usando o Deno.
É importante notar que o tempo de execução do Poku é diferente do tempo de execução dos testes (node
, npx tsx
, bun
, ou deno
).
Recomendações
Para evitar conflitos em ambientes com múltiplas plataformas instaladas (Node.js + Bun, Deno + Bun. etc.), veja os exemplos a seguir:
npx poku --node
- Executa o Poku através do Node.js e garante que todos os testes sejam executados com Node.js (ou tsx para testes com TypeScript).
bunx poku --bun
- Executa o Poku através do Bun e garante que todos os testes sejam executados com Bun.
deno run npm:poku --deno
- Executa o Poku através do Deno e garante que todos os testes sejam executados com Deno.
Para usuários de TypeScript, não é necessário instalar tsx para o Bun e o Deno, pois ambos executam TypeScript nativamente.
Executando CommonJS com Deno
Veja todas as opções para o Deno aqui.
Todos os arquivos como CommonJS
deno run npm:poku --deno --denoCjs
Uma extensão específica como CommonJS
deno run npm:poku --deno --denoCjs='.cjs'
Múltiplas extensões como CommonJS
deno run npm:poku --deno --denoCjs='.cjs,.js'
Usando a API do Poku (conceito avançado)
Na descrição do Poku, você pode ler "O Poku facilita os testes para Node.js, Bun, Deno, e você ao mesmo tempo.", e é verdade:
Isso é mais para demonstrar um ponto, não uma recomendação 🙋🏻♂️
./test/run.test.ts:
import { describe, it, poku, exit } from 'poku';
const parallel = true;
const noExit = true;
const codes: (0 | 1)[] = [];
await describe('Executando Testes em Diferentes Plataformas ao Mesmo Tempo', async () => {
await Promise.all([
it('Suíte de teste deve passar no Node.js', async () => {
const exitCode = await poku(['./test/unit'], {
platform: 'node',
parallel,
noExit,
});
codes.push(exitCode);
}),
it('Suíte de teste deve passar no Bun', async () => {
const exitCode = await poku(['./test/unit'], {
platform: 'bun',
parallel,
noExit,
});
codes.push(exitCode);
}),
it('Suíte de teste deve passar no Deno', async () => {
const exitCode = await poku(['./test/unit'], {
platform: 'deno',
parallel,
noExit,
deno: {
cjs: ['.cjs'],
},
});
codes.push(exitCode);
}),
]);
});
const code = codes.every((code) => code === 0) ? 0 : 1;
exit(code);
Então, escolha uma plataforma:
- Node.js (usando TypeScript)
npx tsx test/run.test.ts
- Bun
bun test/run.test.ts
- Deno
deno run test/run.test.ts
Geralmente é benéfico ter um CI exclusivo para cada plataforma, especialmente para garantir um melhor controle em casos de erro.
Se você encontrar algum erro de digitação, sinta-se à vontade para abrir um Pull Request corrigindo-o.