Comparando executores de testes
Executor de Teste | Isolamento | CJS | ESM | node_modules | Bun | Deno |
---|---|---|---|---|---|---|
🐷 Poku (2.0.0) | ✅ | ✅ | ✅ | ✅ | ✅ | |
Jest (29.7.0) | ✅ | ✅ | experimental | ❓ | ❓ | |
Mocha (10.4.0) | ❌ | ✅ | ✅ | ❓ | ❓ | |
Vitest (1.6.0) | ✅ | depreciado | ✅ | ❓ | ❓ |
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 (v29.7.0)
- ~3x mais rápido que o Vitest (v1.6.0)
- ~1x mais rápido que o Mocha (v10.4.0) + Chai (v5.1.1)
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
assert
do Poku é apenas uma abstração doassert
original 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