Configurando Jest
La filosofía de Jest es que funcione bien por defecto, pero a veces se necesita tener más control en la configuración.
Se recomienda definir la configuración en un archivo JavaScript dedicado, TypeScript o JSON. El archivo será descubierto automáticamente, si se llama jest.config.js|ts|mjs|cjs|json
. Puede usar la bandera --config
para pasar una ruta explícita al archivo.
Tenga en cuenta que el objeto de configuración resultante debe ser siempre serializable en JSON.
El archivo de configuración debería exportar un 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;
O una función devolviendo un objeto:
- JavaScript
- TypeScript
/** @devuelve {Promise<import('jest').Config>} */
module.exports = async () => {
return {
verbose: true,
};
};
import type {Config} from 'jest';
export default async (): Promise<Config> => {
return {
verbose: true,
};
};
Para leer los archivos de configuración de TypeScript, Jest requiere ts-node
. Asegúrese de que está instalado en tu proyecto.
La configuración también puede almacenarse en un archivo JSON como un objeto plano:
{
"bail": 1,
"verbose": true
}
Alternativamente, la configuración de Jest puede definirse a través de la clave "jest"
en el package.json
de tu proyecto:
{
"name": "my-project",
"jest": {
"verbose": true
}
}
Opciones
Puede recuperar los valores predeterminados de Jest de jest-config
para extenderlos si es necesario:
- 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'],
};
exportar configuración predeterminada;
automock
[boolean]bail
[number | boolean]cacheDirectory
[string]clearMocks
[boolean]collectCoverage
[boolean]collectCoverageFrom
[array]coverageDirectory
[string]coveragePathIgnorePatterns
[array<string>]coverageProvider
[string]coverageReporters
[array<string | [string, options]>]coverageThreshold
[object]dependencyExtractor
[string]displayName
[string, object]errorOnDeprecated
[boolean]extensionsToTreatAsEsm
[array<string>]fakeTimers
[object]forceCoverageMatch
[array<string>]globals
[object]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
[boolean]resetModules
[boolean]resolver
[string]restoreMocks
[boolean]rootDir
[string]roots
[array<string>]runner
[string]sandboxInjectedGlobals
[array<string>]setupFiles
[array]setupFilesAfterEnv
[array]showSeed
[boolean]slowTestThreshold
[number]snapshotFormat
[object]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
[boolean]workerIdleMemoryLimit
[number|string]//
[string]workerThreads
Referencia
automock
[boolean]
Default: false
This option tells Jest that all imported modules in your tests should be mocked automatically. All modules used in your tests will have a replacement implementation, keeping the API surface.
Ejemplo:
export default {
authorize: () => 'token',
isAuthorized: secret => secret === 'wizard',
};
importar utilidades de '../utils';
test('si las utils se simularon automáticamente', () => {
// Los métodos públicos de `utils` ahora son funciones simuladas
expect(utils. uthorize.mock).toBeTruthy();
expect(utils.isAuthorized.mock). oBeTruthy();
// Puede proporcionarlos con su propia implementación
// o pasar el valor de retorno esperado
utilidades.authorize.mockReturnValue('mocked_token');
utils.isAuthorized.mockReturnValue(true);
expect(utils.authorize()).toBe('mocked_token');
expect(utils.isAuthorized('not_wizard')).toBeTruthy();
});
Node modules are automatically mocked when you have a manual mock in place (e.g.: __mocks__/lodash.js
). More info here.
Node.js core modules, like fs
, are not mocked by default. They can be mocked explicitly, like jest.mock('fs')
.