Ir para o conteúdo principal
Versão: 29.7

Solução de problemas

Tradução Beta Não Oficial

Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →

Ops, algo deu errado? Use este guia para resolver problemas com o Jest.

Testes estão falhando e você não sabe por quê

Tente usar o suporte de depuração integrado ao Node. Adicione uma declaração debugger; em qualquer teste e, no diretório do seu projeto, execute:

node --inspect-brk node_modules/.bin/jest --runInBand [any other arguments here]
or on Windows
node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other arguments here]

Isso executará o Jest em um processo Node ao qual um depurador externo pode se conectar. Note que o processo pausará até que o depurador se conecte.

Para depurar no Google Chrome (ou qualquer navegador baseado em Chromium), abra seu navegador, acesse chrome://inspect e clique em "Open Dedicated DevTools for Node". Isso mostrará uma lista de instâncias Node disponíveis para conexão. Clique no endereço exibido no terminal (normalmente algo como localhost:9229) após executar o comando acima, e você poderá depurar o Jest usando as DevTools do Chrome.

As Chrome Developer Tools serão exibidas com um breakpoint na primeira linha do script CLI do Jest (isso dá tempo para abrir as ferramentas e evita execução prematura). Clique no botão de "play" no canto superior direito para continuar. Quando o Jest executar o teste contendo debugger, a execução pausará e você poderá examinar o escopo atual e a pilha de chamadas.

"message": "nota"

A opção CLI --runInBand garante que o Jest execute os testes no mesmo processo em vez de criar processos individuais. Normalmente o Jest paraleliza os testes entre processos, mas é difícil depurar múltiplos processos simultaneamente.

Depuração no VS Code

Existem várias formas de depurar testes Jest com o depurador integrado do Visual Studio Code.

Para anexar o depurador integrado, execute seus testes como mencionado anteriormente:

node --inspect-brk node_modules/.bin/jest --runInBand [any other arguments here]
or on Windows
node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand [any other arguments here]

Em seguida, anexe o depurador do VS Code usando esta configuração no launch.json:

{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229
}
]
}

Para iniciar e anexar automaticamente a um processo executando seus testes, use:

{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Jest Tests",
"type": "node",
"request": "launch",
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/.bin/jest",
"--runInBand"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}

Ou para Windows:

{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Jest Tests",
"type": "node",
"request": "launch",
"runtimeArgs": [
"--inspect-brk",
"${workspaceRoot}/node_modules/jest/bin/jest.js",
"--runInBand"
],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}

Se você usa o create-react-app do Facebook, depure testes Jest com:

{
"version": "0.2.0",
"configurations": [
{
"name": "Debug CRA Tests",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/react-scripts",
"args": [
"test",
"--runInBand",
"--no-cache",
"--env=jsdom",
"--watchAll=false"
],
"cwd": "${workspaceRoot}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}

Mais informações sobre depuração Node estão aqui.

Depuração no WebStorm

O WebStorm tem suporte nativo ao Jest. Leia Testing With Jest in WebStorm para detalhes.

Problemas de cache

O script de transformação foi alterado ou o Babel foi atualizado, mas o Jest não reconhece as mudanças?

Tente novamente com --no-cache. O Jest armazena módulos transformados em cache para acelerar execução. Se usar um transformer personalizado, considere adicionar uma função getCacheKey: exemplo no Relay.

Promessas não resolvidas

Se uma promessa nunca for resolvida, este erro pode ocorrer:

- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

Geralmente isso ocorre por conflito entre implementações de Promise. Considere substituir a implementação global, por exemplo globalThis.Promise = jest.requireActual('promise'); e/ou unifique as bibliotecas de Promise usadas.

Se seu teste for demorado, considere aumentar o timeout com jest.setTimeout.

jest.setTimeout(10_000); // 10 second timeout

Problemas com o Watchman

Tente executar o Jest com --no-watchman ou defina a opção de configuração watchman como false.

Veja também a solução de problemas do Watchman.

Testes extremamente lentos no Docker e/ou servidor de CI (Integração Contínua)

Embora o Jest seja normalmente muito rápido em computadores modernos com múltiplos núcleos e SSDs rápidos, ele pode ficar lento em algumas configurações, como nossos usuários descobriram aqui.

Baseado nas descobertas, uma forma de mitigar esse problema e melhorar a velocidade em até 50% é executar os testes sequencialmente.

Para fazer isso, execute os testes na mesma thread usando --runInBand:

# Using Jest CLI
jest --runInBand

# Using your package manager's `test` script (e.g. with create-react-app)
npm test -- --runInBand

Outra alternativa para acelerar a execução de testes em servidores de CI como Travis-CI é definir o pool máximo de workers para ~4. Especificamente no Travis-CI, isso pode reduzir o tempo de execução pela metade. Observação: o plano gratuito do Travis CI para projetos open source inclui apenas 2 núcleos de CPU.

# Using Jest CLI
jest --maxWorkers=4

# Using your package manager's `test` script (e.g. with create-react-app)
npm test -- --maxWorkers=4

Se você usa GitHub Actions, pode utilizar github-actions-cpu-cores para detectar o número de CPUs e passar esse valor para o Jest.

- name: Get number of CPU cores
id: cpu-cores
uses: SimenB/github-actions-cpu-cores@v2
- name: run tests
run: yarn jest --max-workers ${{ steps.cpu-cores.outputs.count }}

Outra opção é usar a flag shard para paralelizar a execução de testes em múltiplas máquinas.

coveragePathIgnorePatterns parece não ter efeito

Verifique se você não está usando o plugin babel-plugin-istanbul. O Jest encapsula o Istanbul e determina quais arquivos devem ter coleta de cobertura. Ao usar babel-plugin-istanbul, todo arquivo processado pelo Babel terá código de coleta de cobertura, ignorando assim o coveragePathIgnorePatterns.

Definindo testes

Os testes devem ser definidos de forma síncrona para que o Jest possa coletá-los adequadamente.

Como exemplo, imagine que escrevemos um teste assim:

// Don't do this it will not work
setTimeout(() => {
it('passes', () => expect(1).toBe(1));
}, 0);

Quando o Jest executa seu teste para coletar os tests, não encontrará nenhum porque definimos a criação de forma assíncrona (no próximo tick do event loop). Isso significa que ao usar test.each você não pode definir a tabela de forma assíncrona dentro de beforeEach/beforeAll.

Ainda não resolveu?

Consulte nossa página de ajuda.