Como ocultar a saída console.log do JavaScript em testes Jest
Eu estava trabalhando hoje em uma base de código que tinha muitas console.log
saídas intencionais em todos os ambientes, exceto produção, então eles estavam aparecendo na saída dos testes do Jest. Teria sido tedioso ir e removê-los um por um, então criei essa configuração simples para suprimir toda console.log
a saída de uma só vez enquanto o Jest estiver em execução.
Configurando Existe
Esse truque depende da capacidade nativa de Jest de zombar de qualquer coisa. O que basicamente faremos é zombar do log
método do console
objeto e deixar os outros métodos intactos.
Primeiro precisamos dizer ao Jest para executar um arquivo de configuração antes que os testes sejam executados. Para fazer isso, editaremos o jest.config.js
arquivo que geralmente está na raiz do seu projeto com outras propriedades de configuração e adicionaremos a seguinte linha:
setupFilesAfterEnv: ['/src/jest.setup.js']
Podemos verificar na documentação do Jest o que o setupFilesAfterEnv
faz:
Uma lista de caminhos para módulos que executam algum código para configurar ou configurar a estrutura de teste antes que cada arquivo de teste no conjunto seja executado.
Agora, quando executarmos nossos testes, eles executarão primeiro o jest.setup.js
que vamos criar agora.
Simulando console.log
Crie um arquivo em src/setup.js
ou onde você apontou seu caminho na etapa anterior. Em seguida, você adicionará isso a ele:
global.console = {
log: jest.fn(),
debug: console.debug,
trace: console.trace,
}
Isso está substituindo o log
método e permitindo os outros. Como eu ainda queria ter a capacidade de produzir algo nos testes, mapeei debug
e trace
. Você pode mapear outros que você possa precisar, como console.table
elementos de renderização em uma tabela, úteis para registrar objetos ou matrizes. Para ser honesto, até escrever isso, eu nunca tinha visto a página do objeto do console no MDN e existem muitos métodos interessantes como o console.dir
que exibe uma lista interativa das propriedades do objeto JavaScript especificado.
Palavras de encerramento
Agora sua console.log
saída é suprimida enquanto seus testes Jest são executados. Se você trabalha em equipe, certifique-se de informar o restante da equipe sobre essa mudança documentando-a, pois alguém pode ficar estressado tentando console.log
algo e não vendo onde deveria estar.