Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GHub
Objetivo
Tecnologias
Instalação [VITEST]
Instalar os pacotes
Criar o arquivo de configuração
vitest.config.ts:Configurar o
tsconfig.jsonpara enxergar os tipos globais, adicione a linha abaixo dentro do objetocompilerOptionsAdicionar scripts no
package.json{ "test": "vitest", "coverage": "vitest run --coverage" }Agora rode o comando
npm run testVai ver o seguinte erro
O vitest não vai conseguir entender os caminhos com
aliases(@/...) que configuramos no init do Next, então precisamos adicionar seguinte trecho de código no objetotestdovitest.config.jspra resolver esse problema:O arquivo deve ficar assim:
Depois disso, tudo deve "funcionar", digo isso pois os problemas com o Vitest acabaram, mas temos que resolver os problemas com dependencias (esses problemas nos acompanham em qualquer framework). Como fizemos com o Jest, vamos fazer aqui, criar um arquivo com um
customRender()que irá ter um Wrapper com os providers do projeto (React Query, NextRouter, etc) e o mock do NextRouter.jest.fn()pelovi.fn()do Vitest.Agora vou trocar o render do RTL no meu teste inicial pelo
customRendere tudo funciona como deveria.Começando a implementar os testes eu senti falta de alguns matchers que tinhamos no jest (através da
@testing-library/jest-dom) e que faziam muito sentido, como o.toBeInTheDocument()ou o.toHaveValue(), e para isso vou instalar essa lib e fazer a configuração para poder usar esses e outros matchers do@testing-library/jest-domInstalar o pacote
Criar um arquivo chamado
setupTests.tsdentro da pasta/teste importar o pacote dentro deleRegistrar o arquivo
setupTests.tsno arquivo de configuração do vitest, dentro do objetotest:setupFiles: './test/setupTests.ts'O arquivo deve ficar assim:
Pronto, todos os nossos testes estão funcionando corretamente, inclusive, vou usar os mesmo testes que implementei no setup do jest.
Desenvolvimento dos testes
.toBeInTheDocument()que o@testing-library/jest-domfornece e normalmente configuramos no Jest. Apesar de ser um método bem intuitivo, como o nome sugere, podemos viver sem ele, e trocá-lo pelotoBeDefined()que tem efeito similar.describe,test/it,expectglobalmente como o jest, ao invés disso precisamos importar nos arquivos de teste. Mas tem como fazer a configuração para que esses métodos fiquem disponíveis sem a necessidade de importa-los, e para isso só precisamos adicionar a chave/valorglobals: trueno arquivo de configuração do vitest e adicionar os tiposvitest/globalsnotypesdotsconfig.json(como foi feito na configuração acima).jestparavi, ex:jest.fn()virouvi.fn())Considerações finais
Como eu configurei o jest primeiro e o vitest depois, vou deixar registrado aqui minhas percepções.
Instalar o jest foi bem trabalhoso, e posso destacar os seguintes pontos ruins:
O setup do vitest foi bem simples, ele funcionar out-of-box com TS fez com tudo ficasse bem mais simples, e não foi necessário implementar aquele monte de mocks e setups para o Next, ele rodou tranquilo.
A únicas configurações adicionais para o Vitest, foi o resolve de
aliasespara que entenda@/pathe a adição dos matchers do@testing-library/jest-dom