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á descoberto automaticamente se for nomeado jest.config.js|ts|mjs|cjs|cts|json. Você pode usar a flag --config para passar um caminho explícito para o arquivo.
Lembre-se que o objeto de configuração resultante deve sempre ser serializável em JSON.
Open Config Examples
- Using
defineConfigfromjestyou should follow this:
- JavaScript
- TypeScript
const {defineConfig} = require('jest');
module.exports = defineConfig({
// ... Specify options here.
});
/** @jest-config-loader ts-node */
// or
/** @jest-config-loader esbuild-register */
import {defineConfig} from 'jest';
export default defineConfig({
// ... Specify options here.
});
- You can retrieve Jest's defaults from
jest-configto extend them if needed:
- JavaScript
- TypeScript
const {defineConfig} = require('jest');
const {defaults} = require('jest-config');
module.exports = defineConfig({
moduleDirectories: [...defaults.moduleDirectories, 'bower_components'],
});
/** @jest-config-loader ts-node */
// or
/** @jest-config-loader esbuild-register */
import {defineConfig} from 'jest';
import {defaults} from 'jest-config';
export default defineConfig({
moduleDirectories: [...defaults.moduleDirectories, 'bower_components'],
});
export default config;
- When using a separate Jest config, you can also extend Jest's options from another config file if needed using
mergeConfigfromjest:
- JavaScript
- TypeScript
const {defineConfig, mergeConfig} = require('jest');
const jestConfig = require('./jest.config');
module.exports = mergeConfig(
jestConfig,
defineConfig({
// ... Specify options here.
}),
);
/** @jest-config-loader ts-node */
// or
/** @jest-config-loader esbuild-register */
import {defineConfig, mergeConfig} from 'jest';
import jestConfig from './jest.config';
export default mergeConfig(
jestConfig,
defineConfig({
// ... Specify options here.
}),
);
- If your Jest config needs to be defined as a function, you can define the config like this:
- JavaScript
- TypeScript
const {defineConfig, mergeConfig} = require('jest');
const jestConfig = require('./jest.config');
module.exports = defineConfig(() =>
mergeConfig(
jestConfig,
defineConfig({
// ... Specify options here.
}),
),
);
/** @jest-config-loader ts-node */
// or
/** @jest-config-loader esbuild-register */
import {defineConfig, mergeConfig} from 'jest';
import jestConfig from './jest.config';
export default defineConfig(() =>
mergeConfig(
jestConfig,
defineConfig({
// ... Specify options here.
}),
),
);
- The configuration also can be stored in a JSON file as a plain object:
{
"bail": 1,
"verbose": true
}
- Alternatively Jest's configuration can be defined through the
"jest"key in thepackage.jsonof your project:
{
"name": "my-project",
"jest": {
"verbose": true
}
}
- Also Jest's configuration json file can be referenced through the
"jest"key in thepackage.jsonof your project:
{
"name": "my-project",
"jest": "./path/to/config.json"
}
Para ler arquivos de configuração TypeScript, o Jest requer por padrão ts-node. Você pode substituir esse comportamento adicionando um comentário docblock @jest-config-loader no topo do arquivo. Atualmente, ts-node e esbuild-register são suportados. Certifique-se que ts-node ou o loader especificado esteja instalado.
/** @jest-config-loader ts-node */
// or
/** @jest-config-loader esbuild-register */
import {defineConfig} from 'jest';
export default defineConfig({
verbose: true,
});
Você também pode passar opções para o loader, por exemplo para habilitar transpileOnly.
/** @jest-config-loader ts-node */
/** @jest-config-loader-options {"transpileOnly": true} */
import type {defineConfig} from 'jest';
export default defineConfig({
verbose: true,
});
Opções
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[booleano]extensionsToTreatAsEsm[array<string>]fakeTimers[objeto]forceCoverageMatch[array<string>]globals[objeto]globalSetup[string]globalTeardown[string]haste[objeto]injectGlobals[booleano]maxConcurrency[número]maxWorkers[número | string]moduleDirectories[array<string>]moduleFileExtensions[array<string>]moduleNameMapper[objeto<string, string | array<string>>]modulePathIgnorePatterns[array<string>]modulePaths[array<string>]notify[booleano]notifyMode[string]openHandlesTimeout[número]preset[string]prettierPath[string]projects[array<string | ProjectConfig>]randomize[booleano]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[booleano]slowTestThreshold[número]snapshotFormat[objeto]snapshotResolver[string]snapshotSerializers[array<string>]testEnvironment[string]testEnvironmentOptions[Objeto]testFailureExitCode[número]testMatch[array<string>]testPathIgnorePatterns[array<string>]testRegex[string | array<string>]testResultsProcessor[string]testRunner[string]testSequencer[string]testTimeout[número]transform[object<string, pathToTransformer | [pathToTransformer, object]>]transformIgnorePatterns[array<string>]unmockedModulePathPatterns[array<string>]verbose[booleano]waitForUnhandledRejections[booleano]watchPathIgnorePatterns[array<string>]watchPlugins[array<string | [string, Object]>]watchman[booleano]workerIdleMemoryLimit[número|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
const {defineConfig} = require('jest');
module.exports = defineConfig({
collectCoverageFrom: [
'**/*.{js,jsx}',
'!**/node_modules/**',
'!**/vendor/**',
],
});
import {defineConfig} from 'jest';
export default defineConfig({
collectCoverageFrom: [
'**/*.{js,jsx}',
'!**/node_modules/**',
'!**/vendor/**',
],
});
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
const {defineConfig} = require('jest');
module.exports = defineConfig({
coverageReporters: ['clover', 'json', 'lcov', ['text', {skipFull: true}]],
});
import {defineConfig} from 'jest';
export default defineConfig({
coverageReporters: ['clover', 'json', 'lcov', ['text', {skipFull: true}]],
});
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
const {defineConfig} = require('jest');
module.exports = defineConfig({
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: -10,
},
},
});
import {defineConfig} from 'jest';
export default defineConfig({
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: -10,
},
},
});
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
const {defineConfig} = require('jest');
module.exports = defineConfig({
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,
},
},
});
import {defineConfig} from 'jest';
export default defineConfig({
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,
},
},
});
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.