Executando verificação de segurança...
19

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 e afterEach
  • test
  • describe e log
  • 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 💛

3

Achei a proposta muito incrível, chega deu vontade de escrever testes. 😂😂
Gostei muito da parte de configuração, que é simplesmente instalar e rodar, isso pra um preguiçoso (eu) é tudo.

1

@patrick, sinceridade é tudo 😂

O legal é que o projeto não abstrai quase nenhuma configuração para si, pelo contrário, apenas estudei quem deve ser responsável pelo quê e distruibuí essas responsabilidades para quem realmente precisa lidar com elas.

3

Parabéns pelo projeto cara, com toda certeza eu vou usar ele. Jest até hoje ta me dando só dor de cabeça.
E como eu gosto MUITO de terminal bonito, isso ta SHOW demais.
Novamente, parabéns pelo trampo.

1
2

Normalmente temos a tendência de complicar o que deve ser simples...
Pra mim, testes unitários devem ser:

  1. Simples de entender
  2. Simples de escrever
  3. Simples de configurar.

Se começa a complicar muito, já dá preguiça de fazer 😂.

Já usei o Poku e sou suspeito pra falar, ele simplificou bastante minha vida! Não precisei ficar horas lendo uma documentação pra rodar meus testes, nem tive que aprender nada novo, é uma forma muito natural...

Pra mim é disso que precisamos, ferramentas que facilitem nosso dia-dia.

Parabéns pelo projeto e espero que dê muitos frutos, eu com certeza usarei o Poku por ai! 🐷

2

Se chamou o Poku de Bun, então o negócio deve estar bom mesmo 😂

O projeto tem muitas inspirações indiretas, o Bun é uma delas.

Acabei nem comentando na publicação, mas o projeto não foi feito baseado apenas nas dores dos gigantes, mas também tenta combinar o melhor que eles oferecem, sem perder a essência de permancer fácil e acessível.

Não vou mentir que não é fácil desenvolver esse carinha, especialmente manter a compatibilidade entre sistemas diferentes está sendo bem complexo, mas eu acredito muito nele e que esse esforço vale cada segundo.

Valeu pelo carinho @militao 🙋🏻‍♂️

2

😅 A ideia é bem parecida: Melhorar o que já existe, sem ter que aprender nada novo. E dá pra gastar energia com outros pontos dentro do projeto

2
1