Configurando o Jest
Esta página foi traduzida por PageTurner AI (beta). Não é oficialmente endossada pelo projeto. Encontrou um erro? Reportar problema →
A filosofia do Jest é funcionar perfeitamente por padrão, mas às vezes você precisa de mais poder de configuração.
Recomenda-se definir a configuração em um arquivo dedicado JavaScript, TypeScript ou JSON. O arquivo será detectado automaticamente se for nomeado jest.config.js|ts|mjs|cjs|json. Você pode usar a flag --config para passar um caminho explícito ao arquivo.
Lembre-se que o objeto de configuração resultante deve sempre ser serializável em JSON.
O arquivo de configuração deve simplesmente exportar um objeto:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
verbose: true,
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
verbose: true,
};
export default config;
Ou uma função que retorna um objeto:
- JavaScript
- TypeScript
/** @returns {Promise<import('jest').Config>} */
module.exports = async () => {
return {
verbose: true,
};
};
import type {Config} from 'jest';
export default async (): Promise<Config> => {
return {
verbose: true,
};
};
Para ler arquivos de configuração TypeScript, o Jest requer ts-node. Certifique-se que ele está instalado no seu projeto.
A configuração também pode ser armazenada em um arquivo JSON como um objeto simples:
{
"bail": 1,
"verbose": true
}
Alternativamente, a configuração do Jest pode ser definida através da chave "jest" no package.json do seu projeto:
{
"name": "my-project",
"jest": {
"verbose": true
}
}
Opções
Você pode recuperar os padrões do Jest do jest-config para estendê-los se necessário:
- JavaScript
- TypeScript
const {defaults} = require('jest-config');
/** @type {import('jest').Config} */
const config = {
moduleFileExtensions: [...defaults.moduleFileExtensions, 'mts', 'cts'],
};
module.exports = config;
import type {Config} from 'jest';
import {defaults} from 'jest-config';
const config: Config = {
moduleFileExtensions: [...defaults.moduleFileExtensions, 'mts'],
};
export default config;
automock[booleano]bail[número | booleano]cacheDirectory[string]clearMocks[booleano]collectCoverage[booleano]collectCoverageFrom[array]coverageDirectory[string]coveragePathIgnorePatterns[array<string>]coverageProvider[string]coverageReporters[array<string | [string, options]>]coverageThreshold[objeto]dependencyExtractor[string]displayName[string, objeto]errorOnDeprecated[boolean]extensionsToTreatAsEsm[array<string>]fakeTimers[objeto]forceCoverageMatch[array<string>]globals[objeto]globalSetup[string]globalTeardown[string]haste[object]injectGlobals[boolean]maxConcurrency[number]maxWorkers[number | string]moduleDirectories[array<string>]moduleFileExtensions[array<string>]moduleNameMapper[object<string, string | array<string>>]modulePathIgnorePatterns[array<string>]modulePaths[array<string>]notify[boolean]notifyMode[string]openHandlesTimeout[number]preset[string]prettierPath[string]projects[array<string | ProjectConfig>]randomize[boolean]reporters[array<moduleName | [moduleName, options]>]resetMocks[booleano]resetModules[booleano]resolver[string]restoreMocks[booleano]rootDir[string]roots[array<string>]runtime[string]runner[string]sandboxInjectedGlobals[array<string>]setupFiles[array]setupFilesAfterEnv[array]showSeed[boolean]slowTestThreshold[number]snapshotFormat[objeto]snapshotResolver[string]snapshotSerializers[array<string>]testEnvironment[string]testEnvironmentOptions[Object]testFailureExitCode[number]testMatch[array<string>]testPathIgnorePatterns[array<string>]testRegex[string | array<string>]testResultsProcessor[string]testRunner[string]testSequencer[string]testTimeout[number]transform[object<string, pathToTransformer | [pathToTransformer, object]>]transformIgnorePatterns[array<string>]unmockedModulePathPatterns[array<string>]verbose[boolean]watchPathIgnorePatterns[array<string>]watchPlugins[array<string | [string, Object]>]watchman[booleano]workerIdleMemoryLimit[number|string]//[string]workerThreads
Referência
automock [booleano]
Padrão: false
Esta opção informa ao Jest que todos os módulos importados em seus testes devem ser mockados automaticamente. Todos os módulos usados nos testes terão uma implementação substituta, mantendo a superfície da API.
Exemplo:
export default {
authorize: () => 'token',
isAuthorized: secret => secret === 'wizard',
};
import utils from '../utils';
test('if utils mocked automatically', () => {
// Public methods of `utils` are now mock functions
expect(utils.authorize.mock).toBeTruthy();
expect(utils.isAuthorized.mock).toBeTruthy();
// You can provide them with your own implementation
// or pass the expected return value
utils.authorize.mockReturnValue('mocked_token');
utils.isAuthorized.mockReturnValue(true);
expect(utils.authorize()).toBe('mocked_token');
expect(utils.isAuthorized('not_wizard')).toBeTruthy();
});
Módulos Node são mockados automaticamente quando você possui um mock manual (ex: __mocks__/lodash.js). Mais informações aqui.
Módulos core do Node.js, como fs, não são mockados por padrão. Eles podem ser mockados explicitamente com jest.mock('fs').
bail [número | booleano]
Padrão: 0
Por padrão, o Jest executa todos os testes e exibe todos os erros no console ao finalizar. A opção de configuração bail pode ser usada para fazer o Jest parar de executar testes após n falhas. Definir bail como true é equivalente a definir bail como 1.
cacheDirectory [string]
Padrão: "/tmp/<path>"
O diretório onde o Jest deve armazenar suas informações de dependência em cache.
O Jest tenta escanear sua árvore de dependências uma vez (inicialmente) e armazená-la em cache para reduzir a sobrecarga do sistema de arquivos durante a execução dos testes. Esta opção permite personalizar onde o Jest armazena esses dados de cache em disco.
clearMocks [booleano]
Padrão: false
Limpa automaticamente chamadas, instâncias, contextos e resultados de mocks antes de cada teste. Equivalente a chamar jest.clearAllMocks() antes de cada teste. Isso não remove nenhuma implementação de mock que possa ter sido fornecida.
collectCoverage [booleano]
Padrão: false
Indica se as informações de cobertura devem ser coletadas durante a execução dos testes. Como isso modifica retroativamente todos os arquivos executados com instruções de coleta de cobertura, pode desacelerar significativamente seus testes.
O Jest inclui dois provedores de cobertura: babel (padrão) e v8. Veja a opção coverageProvider para mais detalhes.
Os provedores de cobertura babel e v8 usam os comentários /* istanbul ignore next */ e /* c8 ignore next */ respectivamente para excluir linhas dos relatórios de cobertura. Para mais informações, consulte a documentação do istanbuljs e do c8.
collectCoverageFrom [array]
Padrão: undefined
Um array de padrões glob indicando um conjunto de arquivos para os quais as informações de cobertura devem ser coletadas. Se um arquivo corresponder ao padrão glob especificado, as informações de cobertura serão coletadas mesmo que não existam testes para este arquivo e ele nunca seja importado no conjunto de testes.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
collectCoverageFrom: [
'**/*.{js,jsx}',
'!**/node_modules/**',
'!**/vendor/**',
],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
collectCoverageFrom: [
'**/*.{js,jsx}',
'!**/node_modules/**',
'!**/vendor/**',
],
};
export default config;
Isso coletará informações de cobertura para todos os arquivos dentro do rootDir do projeto, exceto aqueles que correspondem a **/node_modules/** ou **/vendor/**.
Cada padrão glob é aplicado na ordem especificada na configuração. Por exemplo ["!**/__tests__/**", "**/*.js"] não excluirá __tests__ porque a negação é sobrescrita pelo segundo padrão. Para fazer o glob negado funcionar neste exemplo, ele deve vir após **/*.js.
Esta opção requer que collectCoverage esteja definido como true ou que o Jest seja invocado com --coverage.
Help:
If you are seeing coverage output such as...
=============================== Coverage summary ===============================
Statements : Unknown% ( 0/0 )
Branches : Unknown% ( 0/0 )
Functions : Unknown% ( 0/0 )
Lines : Unknown% ( 0/0 )
================================================================================
Jest: Coverage data for global was not found.
Most likely your glob patterns are not matching any files. Refer to the micromatch documentation to ensure your globs are compatible.
coverageDirectory [string]
Padrão: undefined
O diretório onde o Jest deve gravar seus arquivos de cobertura.
coveragePathIgnorePatterns [array<string>]
Padrão: ["/node_modules/"]
Um array de strings de padrões regex que são comparadas com todos os caminhos de arquivo antes da execução do teste. Se o caminho do arquivo corresponder a qualquer padrão, as informações de cobertura serão ignoradas.
Essas strings de padrão são comparadas com o caminho completo. Use o token <rootDir> para incluir o caminho do diretório raiz do seu projeto e evitar ignorar acidentalmente todos os seus arquivos em ambientes diferentes que podem ter diretórios raiz distintos. Exemplo: ["<rootDir>/build/", "<rootDir>/node_modules/"].
coverageProvider [string]
Indica qual provedor deve ser usado para instrumentar o código para cobertura. Valores permitidos são babel (padrão) ou v8.
coverageReporters [array<string | [string, options]>]
Padrão: ["clover", "json", "lcov", "text"]
Uma lista de nomes de relatores que o Jest usa ao gerar relatórios de cobertura. Qualquer relator do istanbul pode ser utilizado.
Definir essa opção substitui os valores padrão. Adicione "text" ou "text-summary" para ver um resumo da cobertura na saída do console.
Opções adicionais podem ser passadas usando a forma de tupla. Por exemplo, você pode ocultar as linhas do relatório de cobertura para todos os arquivos totalmente cobertos:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
coverageReporters: ['clover', 'json', 'lcov', ['text', {skipFull: true}]],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
coverageReporters: ['clover', 'json', 'lcov', ['text', {skipFull: true}]],
};
export default config;
Para mais informações sobre a forma do objeto de opções, consulte o tipo CoverageReporterWithOptions nas definições de tipo.
coverageThreshold [objeto]
Padrão: undefined
Isso será usado para configurar a aplicação de limites mínimos para os resultados de cobertura. Os limites podem ser especificados como global, como um glob, e como um diretório ou caminho de arquivo. Se os limites não forem atingidos, o Jest falhará. Limites especificados como um número positivo são considerados como a porcentagem mínima necessária. Limites especificados como um número negativo representam o número máximo de entidades não cobertas permitidas.
Por exemplo, com a seguinte configuração, o Jest falhará se houver menos de 80% de cobertura de ramos, linhas e funções, ou se houver mais de 10 instruções não cobertas:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: -10,
},
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: -10,
},
},
};
export default config;
Se globs ou caminhos forem especificados juntamente com global, os dados de cobertura para caminhos correspondentes serão subtraídos da cobertura geral e os limites serão aplicados independentemente. Os limites para globs são aplicados a todos os arquivos que correspondem ao glob. Se o arquivo especificado pelo caminho não for encontrado, um erro será retornado.
Por exemplo, com a seguinte configuração:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
coverageThreshold: {
global: {
branches: 50,
functions: 50,
lines: 50,
statements: 50,
},
'./src/components/': {
branches: 40,
statements: 40,
},
'./src/reducers/**/*.js': {
statements: 90,
},
'./src/api/very-important-module.js': {
branches: 100,
functions: 100,
lines: 100,
statements: 100,
},
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
coverageThreshold: {
global: {
branches: 50,
functions: 50,
lines: 50,
statements: 50,
},
'./src/components/': {
branches: 40,
statements: 40,
},
'./src/reducers/**/*.js': {
statements: 90,
},
'./src/api/very-important-module.js': {
branches: 100,
functions: 100,
lines: 100,
statements: 100,
},
},
};
export default config;
O Jest falhará se:
-
O diretório
./src/componentstem menos de 40% de cobertura de ramos ou instruções. -
Um dos arquivos que correspondem ao glob
./src/reducers/**/*.jstem menos de 90% de cobertura de instruções. -
O arquivo
./src/api/very-important-module.jstem menos de 100% de cobertura. -
Os arquivos restantes, combinados, têm menos de 50% de cobertura (
global).
dependencyExtractor [string]
Padrão: undefined
Esta opção permite o uso de um extrator de dependências personalizado. Ele deve ser um módulo Node que exporta um objeto com uma função extract. Por exemplo:
const crypto = require('crypto');
const fs = require('fs');
module.exports = {
extract(code, filePath, defaultExtract) {
const deps = defaultExtract(code, filePath);
// Scan the file and add dependencies in `deps` (which is a `Set`)
return deps;
},
getCacheKey() {
return crypto
.createHash('md5')
.update(fs.readFileSync(__filename))
.digest('hex');
},
};
A função extract deve retornar um iterável (Array, Set, etc.) com as dependências encontradas no código.
Esse módulo também pode conter uma função getCacheKey para gerar uma chave de cache que determina se a lógica foi alterada e se quaisquer artefatos em cache que dependam dela devem ser descartados.
displayName [string, objeto]
padrão: undefined
Permite que uma etiqueta seja impressa ao lado de um teste enquanto ele está sendo executado. Isso se torna mais útil em repositórios de múltiplos projetos, onde pode haver muitos arquivos de configuração do Jest. Isso indica visualmente a qual projeto um teste pertence.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
displayName: 'CLIENT',
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
displayName: 'CLIENT',
};
export default config;
Alternativamente, pode ser passado um objeto com as propriedades name e color. Isso permite uma configuração personalizada da cor de fundo do displayName. displayName assume o padrão branco quando seu valor é uma string. O Jest usa chalk para fornecer a cor. Dessa forma, todas as opções válidas de cores suportadas pelo chalk também são suportadas pelo Jest.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
displayName: {
name: 'CLIENT',
color: 'blue',
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
displayName: {
name: 'CLIENT',
color: 'blue',
},
};
export default config;
errorOnDeprecated [boolean]
Padrão: false
Faz com que chamadas a APIs obsoletas lancem mensagens de erro úteis. Útil para facilitar o processo de atualização.
extensionsToTreatAsEsm [array<string>]
Padrão: []
O Jest executará arquivos .mjs e .js com o campo type do package.json mais próximo definido como module como Módulos ECMAScript. Se você tiver outros arquivos que devem ser executados com ESM nativo, precisa especificar sua extensão aqui.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
extensionsToTreatAsEsm: ['.ts'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
extensionsToTreatAsEsm: ['.ts'],
};
export default config;
O suporte a ESM no Jest ainda é experimental; consulte a documentação para detalhes.
fakeTimers [objeto]
Padrão: {}
Os temporizadores simulados podem ser úteis quando um código define um timeout longo que não queremos aguardar em um teste. Para detalhes adicionais, consulte o guia de Fake Timers e a documentação da API.
Esta opção fornece a configuração padrão de fake timers para todos os testes. Chamar jest.useFakeTimers() em um arquivo de teste usará essas opções ou as substituirá se um objeto de configuração for passado. Por exemplo, você pode instruir o Jest a manter a implementação original de process.nextTick() e ajustar o limite de temporizadores recursivos que serão executados:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
fakeTimers: {
doNotFake: ['nextTick'],
timerLimit: 1000,
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
fakeTimers: {
doNotFake: ['nextTick'],
timerLimit: 1000,
},
};
export default config;
// install fake timers for this file using the options from Jest configuration
jest.useFakeTimers();
test('increase the limit of recursive timers for this and following tests', () => {
jest.useFakeTimers({timerLimit: 5000});
// ...
});
Em vez de incluir jest.useFakeTimers() em cada arquivo de teste, você pode habilitar fake timers globalmente para todos os testes na sua configuração do Jest:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
fakeTimers: {
enableGlobally: true,
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
fakeTimers: {
enableGlobally: true,
},
};
export default config;
Opções de configuração:
type FakeableAPI =
| 'Date'
| 'hrtime'
| 'nextTick'
| 'performance'
| 'queueMicrotask'
| 'requestAnimationFrame'
| 'cancelAnimationFrame'
| 'requestIdleCallback'
| 'cancelIdleCallback'
| 'setImmediate'
| 'clearImmediate'
| 'setInterval'
| 'clearInterval'
| 'setTimeout'
| 'clearTimeout';
type ModernFakeTimersConfig = {
/**
* If set to `true` all timers will be advanced automatically by 20 milliseconds
* every 20 milliseconds. A custom time delta may be provided by passing a number.
* The default is `false`.
*/
advanceTimers?: boolean | number;
/**
* List of names of APIs that should not be faked. The default is `[]`, meaning
* all APIs are faked.
*/
doNotFake?: Array<FakeableAPI>;
/** Whether fake timers should be enabled for all test files. The default is `false`. */
enableGlobally?: boolean;
/**
* Use the old fake timers implementation instead of one backed by `@sinonjs/fake-timers`.
* The default is `false`.
*/
legacyFakeTimers?: boolean;
/** Sets current system time to be used by fake timers, in milliseconds. The default is `Date.now()`. */
now?: number;
/** Maximum number of recursive timers that will be run. The default is `100_000` timers. */
timerLimit?: number;
};
Por algum motivo, você pode precisar usar a implementação legada de fake timers. Eis como habilitá-la globalmente (opções adicionais não são suportadas):
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
fakeTimers: {
enableGlobally: true,
legacyFakeTimers: true,
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
fakeTimers: {
enableGlobally: true,
legacyFakeTimers: true,
},
};
export default config;
forceCoverageMatch [array<string>]
Padrão: ['']
Arquivos de teste normalmente são ignorados na coleta de cobertura de código. Com esta opção, você pode sobrescrever esse comportamento e incluir arquivos normalmente ignorados.
Por exemplo, se você tiver testes em arquivos fonte nomeados com extensão .t.js como abaixo:
export function sum(a, b) {
return a + b;
}
if (process.env.NODE_ENV === 'test') {
test('sum', () => {
expect(sum(1, 2)).toBe(3);
});
}
Você pode coletar cobertura desses arquivos definindo forceCoverageMatch.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
forceCoverageMatch: ['**/*.t.js'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
forceCoverageMatch: ['**/*.t.js'],
};
export default config;
globals [objeto]
Padrão: {}
Um conjunto de variáveis globais que precisam estar disponíveis em todos os ambientes de teste.
Por exemplo, o seguinte criaria uma variável global __DEV__ definida como true em todos os ambientes de teste:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
globals: {
__DEV__: true,
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
globals: {
__DEV__: true,
},
};
export default config;
Se você especificar um valor de referência global (como objeto ou array) aqui, e algum código modificar esse valor durante a execução de um teste, essa modificação não persistirá entre execuções de teste para outros arquivos. Além disso, o objeto globals deve ser serializável em JSON, portanto não pode ser usado para especificar funções globais. Para isso, use setupFiles.
globalSetup [string]
Padrão: undefined
Esta opção permite o uso de um módulo personalizado de configuração global, que deve exportar uma função (pode ser síncrona ou assíncrona). A função será acionada uma vez antes de todos os conjuntos de testes e receberá dois argumentos: a globalConfig do Jest e a projectConfig.
Um módulo de configuração global configurado em um projeto (usando executor multiprojeto) será acionado apenas quando você executar pelo menos um teste desse projeto.
Variáveis globais definidas via globalSetup só podem ser lidas no globalTeardown. Não é possível acessar esses globais em seus conjuntos de testes.
Embora a transformação de código seja aplicada ao arquivo de configuração vinculado, o Jest não transformará nenhum código em node_modules. Isso ocorre porque é necessário carregar os transformadores reais (ex: babel ou typescript) para realizar a transformação.
module.exports = async function (globalConfig, projectConfig) {
console.log(globalConfig.testPathPattern);
console.log(projectConfig.cache);
// Set reference to mongod in order to close the server during teardown.
globalThis.__MONGOD__ = mongod;
};
module.exports = async function (globalConfig, projectConfig) {
console.log(globalConfig.testPathPattern);
console.log(projectConfig.cache);
await globalThis.__MONGOD__.stop();
};
globalTeardown [string]
Padrão: undefined
Esta opção permite o uso de um módulo personalizado de finalização global que deve exportar uma função (pode ser síncrona ou assíncrona). A função será acionada uma vez após todos os conjuntos de testes e receberá dois argumentos: a globalConfig do Jest e a projectConfig.
Um módulo de finalização global configurado em um projeto (usando executor multiprojeto) será acionado apenas quando voc ê executar pelo menos um teste desse projeto.
A mesma ressalva sobre transformação de node_modules aplicada ao globalSetup também se aplica ao globalTeardown.
haste [object]
Padrão: undefined
Usado para configurar o comportamento do jest-haste-map, o sistema interno de rastreamento/cache de arquivos do Jest. As seguintes opções são suportadas:
type HasteConfig = {
/** Whether to hash files using SHA-1. */
computeSha1?: boolean;
/** The platform to use as the default, e.g. 'ios'. */
defaultPlatform?: string | null;
/** Force use of Node's `fs` APIs rather than shelling out to `find` */
forceNodeFilesystemAPI?: boolean;
/**
* Whether to follow symlinks when crawling for files.
* This options cannot be used in projects which use watchman.
* Projects with `watchman` set to true will error if this option is set to true.
*/
enableSymlinks?: boolean;
/** Path to a custom implementation of Haste. */
hasteImplModulePath?: string;
/** All platforms to target, e.g ['ios', 'android']. */
platforms?: Array<string>;
/** Whether to throw an error on module collision. */
throwOnModuleCollision?: boolean;
/** Custom HasteMap module */
hasteMapModulePath?: string;
/** Whether to retain all files, allowing e.g. search for tests in `node_modules`. */
retainAllFiles?: boolean;
};
injectGlobals [boolean]
Padrão: true
Insere os globais do Jest (expect, test, describe, beforeEach etc.) no ambiente global. Se definido como false, você deve importar de @jest/globals, por exemplo:
import {expect, jest, test} from '@jest/globals';
jest.useFakeTimers();
test('some test', () => {
expect(Date.now()).toBe(0);
});
Esta opção só é suportada usando o executor de testes padrão jest-circus.
maxConcurrency [number]
Padrão: 5
Número que limita a quantidade de testes executados simultaneamente ao usar test.concurrent. Testes além desse limite serão enfileirados e executados quando uma vaga estiver disponível.
maxWorkers [number | string]
Especifica o número máximo de workers que o pool criará para executar testes. No modo de execução única, o padrão é o número de núcleos disponíveis na sua máquina menos um (para a thread principal). No modo de observação, o padrão é metade dos núcleos disponíveis para garantir que o Jest não sobrecarregue sua máquina. Pode ser útil ajustar isso em ambientes com recursos limitados como CIs, mas os padrões atendem à maioria dos casos.
Para ambientes com CPUs variáveis disponíveis, você pode usar configuração baseada em porcentagem:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
maxWorkers: '50%',
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
maxWorkers: '50%',
};
export default config;
moduleDirectories [array<string>]
Padrão: ["node_modules"]
Array de nomes de diretórios que serão pesquisados recursivamente a partir do local do módulo requisitado. Definir esta opção substituirá o padrão. Se quiser ainda pesquisar pacotes em node_modules, inclua-o junto com outras opções:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
moduleDirectories: ['node_modules', 'bower_components'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
moduleDirectories: ['node_modules', 'bower_components'],
};
export default config;
Não é recomendado usar '.' como um dos moduleDirectories, pois isso impede que pacotes com escopo, como @emotion/react, acessem pacotes com o mesmo nome de subdiretório (react). Veja este issue para mais detalhes. Na maioria dos casos, é preferível usar a configuração moduleNameMapper em seu lugar.
moduleFileExtensions [array<string>]
Padrão: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"]
Um array de extensões de arquivo usadas pelos seus módulos. Se você importar módulos sem especificar a extensão, o Jest procurará por essas extensões, na ordem da esquerda para a direita.
Recomendamos colocar as extensões mais usadas no seu projeto no início do array. Se você usa TypeScript, considere mover "ts" e/ou "tsx" para o começo da lista.
moduleNameMapper [object<string, string | array<string>>]
Padrão: null
Um mapeamento de expressões regulares para nomes de módulos ou arrays de nomes de módulos, permitindo substituir recursos como imagens ou estilos por um único módulo.
Módulos mapeados para um alias não são mockados por padrão, independentemente do automocking estar ativado ou não.
Use o token <rootDir> para referenciar o valor de rootDir se precisar usar caminhos de arquivo.
Além disso, você pode substituir grupos capturados por regex usando backreferences numerados.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
moduleNameMapper: {
'^image![a-zA-Z0-9$_-]+$': 'GlobalImageStub',
'^[./a-zA-Z0-9$_-]+\\.png$': '<rootDir>/RelativeImageStub.js',
'module_name_(.*)': '<rootDir>/substituted_module_$1.js',
'assets/(.*)': [
'<rootDir>/images/$1',
'<rootDir>/photos/$1',
'<rootDir>/recipes/$1',
],
},
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
moduleNameMapper: {
'^image![a-zA-Z0-9$_-]+$': 'GlobalImageStub',
'^[./a-zA-Z0-9$_-]+\\.png$': '<rootDir>/RelativeImageStub.js',
'module_name_(.*)': '<rootDir>/substituted_module_$1.js',
'assets/(.*)': [
'<rootDir>/images/$1',
'<rootDir>/photos/$1',
'<rootDir>/recipes/$1',
],
},
};
export default config;
A ordem de definição dos mapeamentos é importante. Os padrões são verificados um por um até encontrar uma correspondência. A regra mais específica deve ser listada primeiro. Isso também se aplica a arrays de nomes de módulos.
Se você fornecer nomes de módulos sem delimitadores ^$, isso pode causar erros difíceis de identificar. Por exemplo, relay substituirá todos os módulos que contêm relay como substring em seu nome: relay, react-relay e graphql-relay serão todos redirecionados para seu stub.
modulePathIgnorePatterns [array<string>]
Padrão: []
Um array de padrões regex que são comparados com todos os caminhos de módulo antes que esses caminhos sejam considerados "visíveis" para o carregador de módulos. Se o caminho de um módulo corresponder a qualquer padrão, ele não poderá ser require() no ambiente de teste.
Essas strings de padrão são comparadas com o caminho completo. Use o token <rootDir> para incluir o caminho do diretório raiz do seu projeto e evitar ignorar acidentalmente todos os seus arquivos em ambientes com diretórios raiz diferentes.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
modulePathIgnorePatterns: ['<rootDir>/build/'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
modulePathIgnorePatterns: ['<rootDir>/build/'],
};
export default config;
modulePaths [array<string>]
Padrão: []
Uma alternativa à variável de ambiente NODE_PATH, modulePaths é um array de caminhos absolutos para locais adicionais onde o Jest deve procurar módulos. Use o token <rootDir> para incluir o caminho do diretório raiz do seu projeto.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
modulePaths: ['<rootDir>/app/'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
modulePaths: ['<rootDir>/app/'],
};
export default config;
notify [boolean]
Padrão: false
Ativa notificações nativas do sistema operacional para resultados de testes. Para exibir notificações, o Jest precisa do pacote node-notifier, que deve ser instalado separadamente:
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev node-notifier
yarn add --dev node-notifier
pnpm add --save-dev node-notifier
bun add --dev node-notifier
No macOS, lembre-se de permitir notificações do terminal-notifier em Preferências do Sistema > Notificações & Foco.
No Windows, o node-notifier cria uma nova entrada no menu iniciar no primeiro uso e não exibe a notificação. As notificações serão exibidas corretamente nas execuções subsequentes.
notifyMode [string]
Padrão: failure-change
Especifica o modo de notificação. Requer notify: true.
Modos
-
always: sempre envia uma notificação. -
failure: envia uma notificação quando os testes falham. -
success: envia uma notificação quando os testes passam. -
change: envia uma notificação quando o status muda. -
success-change: envia uma notificação quando os testes passam ou uma vez quando falham. -
failure-change: envia uma notificação quando os testes falham ou uma vez quando passam.
openHandlesTimeout [number]
Padrão: 1000
Exibe um aviso indicando que há prováveis alças abertas se o Jest não sair corretamente após este número de milissegundos após a conclusão. Use 0 para desativar o aviso.
preset [string]
Padrão: undefined
Um preset que serve como base para a configuração do Jest. Deve apontar para um módulo npm contendo um arquivo jest-preset.json, jest-preset.js, jest-preset.cjs ou jest-preset.mjs na raiz.
Por exemplo, este preset foo-bar/jest-preset.js será configurado da seguinte forma:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
preset: 'foo-bar',
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
preset: 'foo-bar',
};
export default config;
Presets também podem ser relativos a caminhos do sistema de arquivos:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
preset: './node_modules/foo-bar/jest-preset.js',
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
preset: './node_modules/foo-bar/jest-preset.js',
};
export default config;
Se você também especificou rootDir, a resolução deste arquivo será relativa a esse diretório raiz.
prettierPath [string]
Padrão: 'prettier'
Define o caminho para o módulo prettier usado para atualizar snapshots inline.
Prettier version 3 is not supported!
You can either pass prettierPath: null in your config to disable using prettier if you don't need it, or use v2 of Prettier solely for Jest.
{
"devDependencies": {
"prettier-2": "npm:prettier@^2"
}
}
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
prettierPath: require.resolve('prettier-2'),
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
prettierPath: require.resolve('prettier-2'),
};
export default config;
We hope to support Prettier v3 seamlessly out of the box in a future version of Jest. See this tracking issue.
projects [array<string | ProjectConfig>]
Padrão: undefined
Quando a configuração projects recebe um array de caminhos ou padrões glob, o Jest executará testes em todos os projetos especificados simultaneamente. Ideal para monorepos ou quando se trabalha com múltiplos projetos.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
projects: ['<rootDir>', '<rootDir>/examples/*'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
projects: ['<rootDir>', '<rootDir>/examples/*'],
};
export default config;
Esta configuração de exemplo executará o Jest no diretório raiz e em cada pasta no diretório de exemplos. Você pode ter projetos ilimitados rodando na mesma instância do Jest.
O recurso projects também pode ser usado para executar múltiplas configurações ou múltiplos runners. Para isso, você pode passar um array de objetos de configuração. Por exemplo, para executar tanto testes quanto ESLint (via jest-runner-eslint) na mesma invocação do Jest:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
projects: [
{
displayName: 'test',
},
{
displayName: 'lint',
runner: 'jest-runner-eslint',
testMatch: ['<rootDir>/**/*.js'],
},
],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
projects: [
{
displayName: 'test',
},
{
displayName: 'lint',
runner: 'jest-runner-eslint',
testMatch: ['<rootDir>/**/*.js'],
},
],
};
export default config;
Ao usar multi-project runner, recomenda-se adicionar um displayName para cada projeto. Isso exibirá o displayName do projeto junto aos seus testes.
Com projects ativado, o Jest copiará as opções de configuração do nível raiz para cada configuração filha durante a execução, resolvendo seus valores no contexto do filho. Tokens como <rootDir> apontarão para o diretório raiz do filho, mesmo definidos na configuração raiz.
randomize [boolean]
Padrão: false
Equivalente à flag --randomize para randomizar a ordem dos testes em um arquivo.
reporters [array<moduleName | [moduleName, options]>]
Padrão: undefined
Use esta opção para adicionar reporters ao Jest. Deve ser uma lista de nomes de reporters, com opções adicionais passadas via formato de tupla:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
reporters: [
'default',
['<rootDir>/custom-reporter.js', {banana: 'yes', pineapple: 'no'}],
],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
reporters: [
'default',
['<rootDir>/custom-reporter.js', {banana: 'yes', pineapple: 'no'}],
],
};
export default config;