Pitch: Tornando Testes Simples para Node.js, Bun, Deno e TypeScript
Com esse Pitch, espero não só conquistar uma comunidade em torno do Poku, mas também trazer um debate sobre a forma como hoje os testes automatizados são feitos em JavaScript 🙋🏻♂️
O quanto testes são acessíveis atualmente?
No GIF a seguir, dois exemplos reais, o primeiro usando Jest e outro o Poku, ambos chegando no mesmo resultado em um simples teste de "1 é igual a 1"
com ESM:
Um simples assert
do Poku é capaz de gerar um describe
, um log bonitinho e organizado, além de trazer uma depuração mais amigável quando um erro ocorre:
import { assert } from 'poku';
assert(true, 'Meu primeiro assert');
assert.strictEqual('1', 1, 'Meu primeiro erro com assert');
Se você sabe o que é BDD ou TDD, essas três linhas cobrem o conceito BDD 🧪
Não quer descrever cada mensagem e focar na prática? Só não usar o parâmetro
message
e seu TDD está na mão 🔬
Não bastando isso, o projeto não possui uma única dependência externa sequer e no momento dessa postagem, o tamanho total de instalação é menor que 100kB ☁️
No README.md do projeto, você pode ver como ele exibe os logs no terminal, incluindo como ele exibe os erros de asserção.
Origem
A ideia surgiu após a necessidade de testar CJS e ESM ao mesmo tempo, de forma paralela e sequencial, rodando nas versões antigas do Node.js sem perder a compatibilidade com Bun e Deno, além de manter o isolamento para cada arquivo testado e permitir testes em TypeScript sem compilação.
Esses foram os problemas que o Poku resolveu na versão 0.1.0 💡✨
Até que tive uma ideia:
- E se eu recriasse os testes de um projeto enorme usando os testers mais famosos que existem, um por um, sentisse a dor de cada um na pele e resolvesse essas dores no meu projeto?
E eis que não só esse virou meu maior desafio, como o Poku se tornou o tester oficial desse projeto enorme 🎉
Mas por que "Poku" 🐷?
Falando sério? A ideia só veio 😂
Mas o mascote tem um propósito muito importante visualmente:
- Mostrar que testes podem sim (!) ser simples e até amigáveis 🤝
E eu posso provar:
E se meu teste realmente exige algo complexo?
Esses são os métodos atualmente disponíveis do Poku:
Essenciais
- poku (execução dos testes)
- assert (testes de asserção)
- startService (executa arquivos em segundo plano)
- startScript (executa scripts do
package.json
em segundo plano)- Esse aqui está dando bastante trabalho 🧑🏻🔬
Auxiliares
beforeEach
eafterEach
test
describe
elog
listFiles
exit
Auxiliares?
Sim, eu amo o fato de tornar ferramentas críticas dos gigantes em helpers no Poku, pois nem todo teste precisa de um tanque de guerra, mas se precisar, você tem à disposição.
Comunidade
Esse é um projeto que trato com muito carinho, seria uma honra conquistar uma comunidade em torno dele e, como eu brinco na documentação, saber que mais pessoas estão adotando um "Pokinho" pra elas 🩵
Repositório no GitHub: github.com/wellwelwel/poku
Sintam-se em casa pra abrir Issues, discutir funcionalidades e inclusive debater sobre como os testes são feitos atualmente 🚀
Se alguém tiver interesse em entender como o Poku consegue fazer o que faz, eu explicaria com toda felicidade do mundo 🧙🏻
Obrigado pelo imenso incentivo @filipedeschamps 💛