Comparando executores de testes
| Executor de Teste | Isolamento | CJS | ESM | node_modules | Tamanho | Bun | Deno | 
|---|---|---|---|---|---|---|---|
| 🐷 Poku | ✅ | ✅ | ✅ | 1 pacote (poku) | ✅ | ✅ | |
| Jest (30.0.5) | ✅ | ✅ | experimental | 296 pacotes | ❓ | ❓ | |
| Mocha (11.7.1) | ❌ | ✅ | ✅ | 91 pacotes | ❓ | ❓ | |
| Vitest (3.2.4) | ✅ | depreciado | ✅ | 49 pacotes | ❓ | ❓ | 
Comparações Rápidas
Desempenho
O Poku é continuamente testado para garantir as seguintes expectativas para o uso básico:
- ~4x mais rápido que o Jest (v30.0.5)
 - ~5x mais rápido que o Vitest (v3.2.4)
 - ~1x mais rápido que o Mocha (v11.7.1) — mesmo com isolamento por arquivos de teste 🚀
 
Todas as comparações são arredondadas para baixo (por exemplo, 4.99 seria arredondado para ~4x).
Você pode ver como os testes são executados e comparados no diretório benchmark.
Tamanho da Instalação
Comparação com TypeScript
Comparação usando TypeScript (sem compilação) e ESM para mostrar um teste de erro simples:
- Vamos começar a partir da instalação 🔬
 
- Poku
 - Jest
 - Mocha + Chai
 - Vitest
 - AVA
 
Poku
Instalação
npm i -D poku tsx
Criando o arquivo de teste
test/index.test.ts
import { assert } from 'poku';
assert.deepStrictEqual('1', 1, 'Número não pode ser um texto');
Executando os testes
npx poku
Isso é tudo 🎉
dica
Para testes simples, o Poku não precisa usar test, describe ou it, pois a mensagem já está no assert.
- O 
assertdo Poku é apenas uma abstração doassertoriginal do Node.js. - Isso significa: Nenhum novo aprendizado é necessário 🎉
 
Adote um Poku para você 🩵
Jest
Instalação
npm i -D jest @types/jest ts-jest
Configurando o TypeScript
Adicione no seu tsconfig.json
{
  "compilerOptions": {
    "esModuleInterop": true
  }
}
Configurando o Jest
jest.config.js
export default {
  preset: 'ts-jest',
  testEnvironment: 'node',
  testMatch: ['**/test/**/*.test.ts'],
};
Criando o arquivo de teste
test/index.test.ts
describe('Comparação de tipos', () => {
  test('Número não pode ser um texto', () => {
    expect('1').toStrictEqual(1);
  });
});
Executando os testes
npx jest
Mocha + Chai
Instalação
npm i -D mocha @types/mocha chai @types/chai ts-node
Configurando o ts-node
ts-loader.js
import { register } from 'node:module';
import { pathToFileURL } from 'node:url';
register('ts-node/esm', pathToFileURL('./'));
Configurando o Mocha
.mocharc.json
{
  "spec": "./test/**/*.test.ts",
  "require": "ts-loader.js"
}
Criando um arquivo de teste
test/index.test.ts
import { expect } from 'chai';
describe('Comparação de tipos', () => {
  it('Número não pode ser um texto', () => {
    expect('1').to.deep.equal(1);
  });
});
Executando os testes
npx mocha
Vitest
Instalação
npm i -D vitest ts-node
Configurando o Vitest
vitest.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
  test: {
    include: ['test/**/*.test.ts'],
    globals: true,
    environment: 'node',
  },
});
Criando um arquivo de teste
test/index.test.ts
import { describe, it, expect } from 'vitest';
describe('Comparação de tipos', () => {
  it('Número não pode ser um texto', () => {
    expect('1').toStrictEqual(1);
  });
});
Executando os testes
npx vitest run
AVA
Instalação
npm i -D ava tsimp
Configurando o Git
Inclua no .gitignore:
/.tsimp
Configurando o AVA
Inclua no package.json:
{
  "ava": {
    "files": ["test/**/*.test.ts"],
    "extensions": {
      "ts": "module"
    },
    "nodeArguments": ["--import=tsimp"]
  }
}
Criando o arquivo de teste
test/index.test.ts
import test from 'ava';
test('Número não pode ser um texto', (t) => {
  t.deepEqual('1', 1);
});
Executando os testes
npx ava