O Node já traz executor de testes
Durante anos, escrever o primeiro teste de um projeto Node começava por escolher entre o Jest, o Mocha, o Vitest e mais três — e por instalar duzentos pacotes para correr uma asserção.
Desde a versão 20, o Node traz um executor de testes embutido. Para projetos pequenos e para bibliotecas, muitas vezes é tudo o que é preciso.
1. Um teste, sem instalar nada
import assert from 'node:assert/strict';
import { test } from 'node:test';
import { somar } from './calculadora.js';
test('soma dois números', () => {
assert.equal(somar(2, 3), 5);
});node --testO node --test procura sozinho os ficheiros com .test. ou _test. no nome, ou dentro de uma pasta test/.
2. O que vem na caixa
describeeit, para quem vem do Mocha ou do Jest.before,after,beforeEacheafterEach.test.skip,test.onlyetest.todo.Testes assíncronos: devolver uma promessa basta.
--watch, para repetir a cada gravação, e--experimental-test-coveragepara a cobertura.
import assert from 'node:assert/strict';
import { describe, it, beforeEach } from 'node:test';
describe('carrinho', () => {
let carrinho;
beforeEach(() => {
carrinho = [];
});
it('começa vazio', () => {
assert.equal(carrinho.length, 0);
});
it('aceita um artigo', async () => {
carrinho.push(await procurar('cadeira'));
assert.equal(carrinho.length, 1);
});
});3. Onde ele não chega
Não traz transformação de TypeScript nem de JSX, não simula um browser, e o sistema de mocks é mais modesto do que o do Jest. Para uma aplicação de interface, uma ferramenta a sério continua a compensar.
Para uma biblioteca, um script ou o código de servidor de um projeto pequeno, a conta é diferente: zero dependências, zero configuração, e um ficheiro a menos na raiz do repositório.
{
"scripts": {
"test": "node --test",
"test:watch": "node --test --watch"
}
}