Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementa ambiente completo de testes #74

Closed
wants to merge 5 commits into from
Closed

Conversation

filipedeschamps
Copy link
Owner

@filipedeschamps filipedeschamps commented Jul 20, 2021

Turma, não engatei isso no CI então não há a garantia que irá funcionar por completo mas ao mesmo tempo eu estou extremamente feliz com o ambiente de testes local.

Em resumo, depois de instalar as novas dependências, você pode:

$ npm test              # rodar uma única vez
$ npm run test:watch    # rodar a cada alteração de arquivo

E isso vai automaticamente levantar e matar todos os serviços caso você escolha fazer um test E2E. E caso essa seja a escolha, basta dentro do seu teste você fazer o seguinte:

import allServicesFactory from "tests/services.js";
const allServices = allServicesFactory();

beforeAll(async () => {
  return await allServices.start();
});

// Seus testes, que podem usar qualquer serviço disponível

afterAll(async () => {
  return await allServices.stop();
});

E como é teste, cada vez que você rodar ele, o script de serviço irá subir um novo banco de dados do zero (sem state) para começar de um estado conhecido. E caso seu teste quebre no meio e deixe alguma porta presa, não tem problema, quando você rodar de novo ele vai matar o processo que ficou preso e subir tudo de novo, começando do zero. Isso inclusive se você estiver com a estrela do Mario implementando no modo npm run test:watch.

E tem muita coisa para fazer conforme as necessidades forem chegando, como por exemplo ao resetar o banco deixar ele num estado específico que você quer, e tudo isso a gente vai implementando conforme as implementações dos recursos do site.

Resumo

  1. Crie um arquivo de teste com o sufixo .test.js ao lado do arquivo que você quer testar.
  2. Não importa se é um teste Unitário ou E2E.
  3. Nesse PR estou testando a rota /api/v1/migrations então na pasta /pages/api/v1/migrations você encontra o arquivo index.public.js e ao lado criei o arquivo index.test.js.
  4. Pronto, basta escrever seu teste.
  5. Caso ele seja E2E, não se esqueça de levantar os serviços usando o helper de allServices mostrado acima.

Próximo passo

Engatar no CI aqui do Github. To empolgado, espero que funcione sem muitas complicações 👍

[edit]

O jest foi configurado para aceitar módulos do ES6 e também os absolute imports do Next.js 👍

[edit2]

Os containers criados para o ambiente de teste e desenvolvimento não são os mesmos, então você não vai perder o state do seu banco de desenvolvimento ao rodar o teste 👍

And transform it from a Model to a infrastructure
component. Also make every method responsible of
opening and closing the database connection, since
it's safer this way.
* Works with ES6 modules
* Works with Next.js Absolute Paths
@vercel
Copy link

vercel bot commented Jul 20, 2021

This pull request is being automatically deployed with Vercel (learn more).
To see the status of your deployment, click below or on the icon next to each commit.

🔍 Inspect: https://vercel.com/tabnews/tabnews/GbGLxztuebBhCQAZ8PEk5buRhZxK
✅ Preview: https://tabnews-git-tests-tabnews.vercel.app

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant