Jest konfigurieren
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Die Philosophie von Jest ist es, standardmäßig hervorragend zu funktionieren, aber manchmal benötigt man einfach mehr Konfigurationsmöglichkeiten.
Es wird empfohlen, die Konfiguration in einer dedizierten JavaScript-, TypeScript- oder JSON-Datei zu definieren. Die Datei wird automatisch erkannt, wenn sie jest.config.js|ts|mjs|cjs|cts|json heißt. Mit dem Flag --config kann ein expliziter Pfad zur Datei übergeben werden.
Beachte, dass das resultierende Konfigurationsobjekt immer JSON-serialisierbar sein muss.
Die Konfigurationsdatei sollte einfach ein Objekt exportieren:
- 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;
Oder eine Funktion, die ein Objekt zurückgibt:
- 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,
};
};
Zum Lesen von TypeScript-Konfigurationsdateien benötigt Jest standardmäßig ts-node. Dieses Verhalten kann durch Hinzufügen eines @jest-config-loader-Docblocks am Dateianfang überschrieben werden. Aktuell werden ts-node und esbuild-register unterstützt. Stelle sicher, dass ts-node oder der angegebene Loader installiert ist.
/** @jest-config-loader ts-node */
// or
/** @jest-config-loader esbuild-register */
import type {Config} from 'jest';
const config: Config = {
verbose: true,
};
export default config;
Du kannst auch Optionen an den Loader übergeben, z.B. um transpileOnly zu aktivieren.
/** @jest-config-loader ts-node */
/** @jest-config-loader-options {"transpileOnly": true} */
import type {Config} from 'jest';
const config: Config = {
verbose: true,
};
export default config;
Die Konfiguration kann auch als einfaches Objekt in einer JSON-Datei gespeichert werden:
{
"bail": 1,
"verbose": true
}
Alternativ kann Jests Konfiguration über den "jest"-Schlüssel in der package.json deines Projekts definiert werden:
{
"name": "my-project",
"jest": {
"verbose": true
}
}
Jests Konfigurations-JSON-Datei kann auch über den "jest"-Schlüssel in der package.json deines Projekts referenziert werden:
{
"name": "my-project",
"jest": "./path/to/config.json"
}
Optionen
Du kannst Jests Standardwerte aus jest-config abrufen, um sie bei Bedarf zu erweitern:
- JavaScript
- TypeScript
const {defaults} = require('jest-config');
/** @type {import('jest').Config} */
const config = {
moduleDirectories: [...defaults.moduleDirectories, 'bower_components'],
};
module.exports = config;
import type {Config} from 'jest';
import {defaults} from 'jest-config';
const config: Config = {
moduleDirectories: [...defaults.moduleDirectories, 'bower_components'],
};
export default config;
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>]runtime[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[string | 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]waitForUnhandledRejections[boolean]watchPathIgnorePatterns[array<string>]watchPlugins[array<string | [string, Object]>]watchman[boolean]workerIdleMemoryLimit[number|string]//[string]workerThreads
Referenz
automock [boolean]
Standard: false
Diese Option weist Jest an, alle importierten Module in deinen Tests automatisch zu mocken. Alle in Tests verwendeten Module erhalten eine Ersetzungsimplementierung, wobei die API-Oberfläche erhalten bleibt.
Beispiel:
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();
});
Node-Module werden automatisch gemockt, wenn ein manueller Mock vorhanden ist (z.B. __mocks__/lodash.js). Mehr Informationen hier.
Node.js-Kernmodule wie fs werden standardmäßig nicht gemockt. Sie können explizit gemockt werden, z.B. mit jest.mock('fs').
bail [number | boolean]
Standard: 0
Standardmäßig führt Jest alle Tests aus und gibt alle Fehler nach Abschluss in der Konsole aus. Die Bail-Option kann verwendet werden, um Jest nach n Fehlern anzuhalten. Das Setzen von bail auf true ist dasselbe wie das Setzen auf 1.
cacheDirectory [string]
Standard: "/tmp/<path>"
Das Verzeichnis, in dem Jest seine zwischengespeicherten Abhängigkeitsinformationen speichern soll.
Jest versucht, Ihre Abhängigkeitsstruktur einmalig (im Voraus) zu scannen und zwischenzuspeichern, um den Dateisystem-Overhead während der Testausführung zu reduzieren. Diese Option ermöglicht es, den Speicherort für diese Cache-Daten auf dem Datenträger anzupassen.
clearMocks [boolean]
Standard: false
Löscht automatisch Mock-Aufrufe, Instanzen, Kontexte und Ergebnisse vor jedem Test. Entspricht dem Aufruf von jest.clearAllMocks() vor jedem Test. Entfernt keine Mock-Implementierungen, die möglicherweise bereitgestellt wurden.
collectCoverage [boolean]
Standard: false
Gibt an, ob während der Testausführung Coverage-Informationen gesammelt werden sollen. Da dies alle ausgeführten Dateien mit Coverage-Erfassungsanweisungen erweitert, kann es die Testgeschwindigkeit erheblich reduzieren.
Jest bietet zwei Coverage-Provider: babel (Standard) und v8. Details unter coverageProvider.
Die Coverage-Provider babel und v8 verwenden Kommentare /* istanbul ignore next */ bzw. /* c8 ignore next */, um Zeilen von Coverage-Berichten auszuschließen. Weitere Informationen: istanbuljs-Dokumentation und c8-Dokumentation.
collectCoverageFrom [array]
Standard: undefined
Ein Array von Glob-Mustern, die Dateien definieren, für die Coverage-Informationen gesammelt werden sollen. Wenn eine Datei einem Muster entspricht, wird ihre Coverage erfasst – selbst wenn keine Tests existieren oder sie im Testsuite nicht eingebunden wird.
- 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;
Erfasst Coverage für alle Dateien im rootDir des Projekts, außer **/node_modules/** oder **/vendor/**.
Glob-Muster werden in der konfigurierten Reihenfolge verarbeitet. Beispiel: ["!**/__tests__/**", "**/*.js"] schließt __tests__ NICHT aus, da das Negationsmuster vom zweiten Muster überschrieben wird. Für korrekte Negation muss das Negationsmuster nach **/*.js stehen.
Diese Option erfordert, dass collectCoverage auf true gesetzt ist oder dass Jest mit --coverage aufgerufen wird.
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]
Standard: undefined
Das Verzeichnis, in dem Jest seine Coverage-Dateien ausgeben soll.
coveragePathIgnorePatterns [array<string>]
Standard: ["/node_modules/"]
Ein Array von Regex-Mustern, die gegen Dateipfade geprüft werden. Bei Übereinstimmung wird die Coverage-Erfassung übersprungen.
Diese Muster werden mit dem vollständigen Pfad abgeglichen. Verwenden Sie den <rootDir>-Platzhalter, um den Pfad zum Projektstammverzeichnis einzubeziehen. Dies verhindert, dass versehentlich Dateien in verschiedenen Umgebungen mit unterschiedlichen Stammverzeichnissen ignoriert werden. Beispiel: ["<rootDir>/build/", "<rootDir>/node_modules/"].
coverageProvider [string]
Legt den Provider fest, der zur Instrumentierung von Code für die Abdeckungsanalyse verwendet wird. Zulässige Werte sind babel (Standard) oder v8.
coverageReporters [array<string | [string, options]>]
Standard: ["clover", "json", "lcov", "text"]
Eine Liste von Reporter-Namen, die Jest für die Erstellung von Coverage-Berichten verwendet. Jeder Istanbul Reporter kann genutzt werden.
Durch Setzen dieser Option werden die Standardwerte überschrieben. Füge "text" oder "text-summary" hinzu, um eine Coverage-Zusammenfassung in der Konsolenausgabe zu sehen.
Zusätzliche Optionen können über die Tupel-Form übergeben werden. Beispielsweise kannst du Coverage-Berichtszeilen für vollständig abgedeckte Dateien ausblenden:
- 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;
Weitere Informationen zur Struktur des Optionsobjekts findest du im Typ CoverageReporterWithOptions in den Typdefinitionen.
coverageThreshold [object]
Standard: undefined
Konfiguriert Mindestanforderungen für Coverage-Ergebnisse. Schwellenwerte können als global, als Glob oder als Datei-/Verzeichnispfad definiert werden. Bei Nichterreichen scheitert Jest. Positive Werte definieren Mindestprozentsätze, negative Werte maximale erlaubte ungedeckte Entitäten.
Beispiel: Mit dieser Konfiguration scheitert Jest bei weniger als 80% Branch-, Line- und Function-Coverage oder mehr als 10 ungedeckten Statements:
- 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;
Bei Kombination von global mit Glob/Path-Angaben werden deren Coverage-Daten vom Gesamtergebnis abgezogen. Schwellenwerte für Globs gelten für alle passenden Dateien. Nicht gefundene Pfade erzeugen Fehler.
Beispielkonfiguration:
- 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;
Jest scheitert, wenn:
-
Das Verzeichnis
./src/componentsweniger als 40% Branch- oder Statement-Coverage hat. -
Eine Datei des
./src/reducers/**/*.js-Globs weniger als 90% Statement-Coverage hat. -
Die Datei
./src/api/very-important-module.jsweniger als 100% Coverage hat. -
Die restlichen Dateien insgesamt weniger als 50% Coverage haben (
global).
dependencyExtractor [string]
Standard: undefined
Ermöglicht die Verwendung eines benutzerdefinierten Dependency Extractors. Muss ein Node-Modul sein, das ein Objekt mit einer extract-Funktion exportiert. Beispiel:
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');
},
};
Die extract-Funktion muss ein Iterable (Array, Set, etc.) mit den im Code gefundenen Abhängigkeiten zurückgeben.
Das Modul kann auch eine getCacheKey-Funktion enthalten, um Cache-Keys zu generieren und veraltete Artefakte zu verwerfen.
displayName [string, object]
Standardwert: undefined
Ermöglicht die Anzeige eines Labels neben laufenden Tests. Besonders nützlich in Multi-Projekt-Repositories, um Tests zuzuordnen.
- 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;
Alternativ kann ein Objekt mit name und color übergeben werden. Dies erlaubt individuelle Hintergrundfarben für displayName. String-Werte sind standardmäßig weiß. Jest nutzt chalk, unterstützt also alle validen Farboptionen von chalk.
- 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]
Standard: false
Lässt Aufrufe veralteter APIs mit hilfreichen Fehlermeldungen scheitern. Erleichtert Upgrades.
extensionsToTreatAsEsm [array<string>]
Standard: []
Jest führt .mjs- und .js-Dateien aus, deren nächstgelegene package.json ein type-Feld mit dem Wert module hat, als ECMAScript-Module. Falls Sie andere Dateien haben, die mit nativen ESM laufen sollen, müssen Sie deren Dateiendung hier angeben.
- 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;
Jests ESM-Unterstützung ist noch experimentell. Weitere Details finden Sie in der Dokumentation.
fakeTimers [object]
Standard: {}
Künstliche Timer sind nützlich, wenn Code lange Timeouts setzt, die in Tests nicht abgewartet werden sollen. Weitere Details im Leitfaden zu künstlichen Timern und der API-Dokumentation.
Diese Option liefert die Standardkonfiguration für künstliche Timer in allen Tests. Der Aufruf von jest.useFakeTimers() in einer Testdatei verwendet diese Einstellungen oder überschreibt sie bei Übergabe eines Konfigurationsobjekts. Beispielsweise können Sie Jest anweisen, die Originalimplementierung von process.nextTick() beizubehalten und das Limit rekursiver Timer anzupassen:
- 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});
// ...
});
Statt jest.useFakeTimers() in jede Testdatei einzufügen, können Sie künstliche Timer global für alle Tests in Ihrer Jest-Konfiguration aktivieren:
- 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;
Konfigurationsoptionen:
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;
};
Falls erforderlich, können Sie die Legacy-Implementierung künstlicher Timer verwenden. So aktivieren Sie sie global (zusätzliche Optionen werden nicht unterstützt):
- 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>]
Standard: ['']
Testdateien werden normalerweise von der Code-Coverage-Erfassung ausgeschlossen. Mit dieser Option können Sie dies überschreiben und ansonsten ignorierte Dateien einbeziehen.
Beispiel: Wenn Sie Tests in Quelldateien mit der Endung .t.js haben:
export function sum(a, b) {
return a + b;
}
if (process.env.NODE_ENV === 'test') {
test('sum', () => {
expect(sum(1, 2)).toBe(3);
});
}
Können Sie deren Coverage mit forceCoverageMatch erfassen:
- 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 [object]
Standard: {}
Ein Satz globaler Variablen, die in allen Testumgebungen verfügbar sein müssen.
Beispiel: So erstellen Sie eine globale Variable __DEV__ mit dem Wert true für alle Testumgebungen:
- 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;
Wenn Sie hier einen globalen Referenzwert (wie ein Objekt oder Array) angeben und Code diesen während eines Tests verändert, wird diese Änderung nicht über Testläufe in anderen Dateien hinweg beibehalten. Zudem muss das globals-Objekt JSON-serialisierbar sein – globale Funktionen können hier nicht definiert werden. Verwenden Sie hierfür setupFiles.
globalSetup [string]
Standard: undefined
Diese Option ermöglicht die Verwendung eines benutzerdefinierten globalen Setup-Moduls, das eine Funktion exportieren muss (synchron oder asynchron). Die Funktion wird einmal vor allen Testsuites ausgelöst und erhält zwei Argumente: Jests globalConfig und projectConfig.
Ein globales Setup-Modul, das in einem Projekt konfiguriert ist (mit Multi-Project-Runner), wird nur ausgelöst, wenn mindestens ein Test aus diesem Projekt ausgeführt wird.
Globale Variablen, die über globalSetup definiert werden, sind ausschließlich in globalTeardown lesbar. Sie können diese Globals nicht in Ihren Testsuites abrufen.
Während Code-Transformation auf die verlinkte Setup-Datei angewendet wird, transformiert Jest keinen Code in node_modules. Dies ist notwendig, da die eigentlichen Transformer (z.B. babel oder typescript) geladen werden müssen, um die Transformation durchzuführen.
module.exports = async function (globalConfig, projectConfig) {
console.log(globalConfig.testPathPatterns);
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.testPathPatterns);
console.log(projectConfig.cache);
await globalThis.__MONGOD__.stop();
};
globalTeardown [string]
Standard: undefined
Diese Option ermöglicht die Verwendung eines benutzerdefinierten globalen Teardown-Moduls, das eine Funktion exportieren muss (synchron oder asynchron). Die Funktion wird einmal nach allen Testsuites ausgelöst und erhält zwei Argumente: Jests globalConfig und projectConfig.
Ein globales Teardown-Modul, das in einem Projekt konfiguriert ist (mit Multi-Project-Runner), wird nur ausgelöst, wenn mindestens ein Test aus diesem Projekt ausgeführt wird.
Die gleiche Einschränkung bezüglich der Transformation von node_modules wie bei globalSetup gilt auch für globalTeardown.
haste [object]
Standard: undefined
Hiermit wird das Verhalten von jest-haste-map, Jests internem Datei-Crawler/Cache-System, konfiguriert. Folgende Optionen werden unterstützt:
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]
Standard: true
Fügt Jests Globals (expect, test, describe, beforeEach etc.) in die globale Umgebung ein. Bei false müssen Sie diese aus @jest/globals importieren, z.B.:
import {expect, jest, test} from '@jest/globals';
jest.useFakeTimers();
test('some test', () => {
expect(Date.now()).toBe(0);
});
Diese Option wird nur mit dem standardmäßigen jest-circus-Testrunner unterstützt.
maxConcurrency [number]
Standard: 5
Begrenzt die Anzahl der Tests, die gleichzeitig mit test.concurrent ausgeführt werden dürfen. Tests über diesem Limit werden in eine Warteschlange gestellt und ausgeführt, sobald ein Slot frei wird.
maxWorkers [number | string]
Legt die maximale Anzahl von Workern fest, die der Worker-Pool für das Ausführen von Tests erzeugt. Im Einzelausführungsmodus entspricht dies standardmäßig der Anzahl der verfügbaren CPU-Kerne minus einem für den Hauptthread. Im Watch-Modus verwendet Jest standardmäßig die Hälfte der verfügbaren Kerne, um Ressourcen zu schonen. Anpassungen können in ressourcenbeschränkten Umgebungen wie CI-Systemen sinnvoll sein, die Standardwerte sind jedoch für die meisten Anwendungsfälle angemessen.
Für Umgebungen mit variabler CPU-Verfügbarkeit können Sie eine prozentbasierte Konfiguration verwenden:
- 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>]
Standardwert: ["node_modules"]
Ein Array von Verzeichnisnamen, die rekursiv vom Ort des anfordernden Moduls durchsucht werden. Das Setzen dieser Option überschreibt den Standardwert. Wenn Sie weiterhin node_modules durchsuchen möchten, müssen Sie es explizit angeben:
- 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;
Es wird davon abgeraten, '.' als eine der moduleDirectories zu verwenden, da dies verhindert, dass gepackte Pakete wie @emotion/react auf Pakete mit demselben Unterverzeichnisnamen (react) zugreifen können. Weitere Details finden Sie in diesem Issue. In den meisten Fällen ist es vorzuziehen, stattdessen die moduleNameMapper-Konfiguration zu verwenden.
moduleFileExtensions [array<string>]
Standardwert: ["js", "mjs", "cjs", "jsx", "ts", "mts", "cts", "tsx", "json", "node"]
Ein Array von Dateiendungen, die Ihre Module verwenden. Wenn Sie Module ohne Angabe einer Dateiendung importieren, durchsucht Jest diese Endungen in der angegebenen Reihenfolge (von links nach rechts).
Wir empfehlen, die am häufigsten verwendeten Endungen in Ihrem Projekt links zu platzieren. Wenn Sie TypeScript verwenden, sollten Sie daher "ts" und/oder "tsx" an den Anfang des Arrays setzen.
moduleNameMapper [object<string, string | array<string>>]
Standardwert: null
Eine Zuordnung von regulären Ausdrücken zu Modulnamen oder Arrays von Modulnamen, die es ermöglicht, Ressourcen wie Bilder oder Styles mit einem einzigen Modul-Stub zu ersetzen.
Module, die einem Alias zugeordnet sind, werden standardmäßig nicht gemockt, unabhängig davon, ob Automocking aktiviert ist oder nicht.
Verwenden Sie den Platzhalter <rootDir>, um auf den Wert von rootDir zu verweisen, wenn Sie Dateipfade nutzen möchten.
Zusätzlich können Sie erfasste Regex-Gruppen mittels nummerierter Rückverweise ersetzen.
- 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;
Die Reihenfolge der Zuordnungen ist entscheidend. Muster werden nacheinander geprüft, bis eines passt. Die spezifischste Regel sollte zuerst stehen. Dies gilt auch für Arrays von Modulnamen.
Wenn Sie Modulnamen ohne Grenzen (^$) angeben, kann dies schwer erkennbare Fehler verursachen. Beispielsweise würde relay alle Module ersetzen, die relay als Teilstring enthalten: relay, react-relay und graphql-relay würden alle auf Ihren Stub verweisen.
modulePathIgnorePatterns [array<string>]
Standard: []
Ein Array von Regex-Mustern, die gegen alle Modulpfade geprüft werden, bevor diese Pfade für den Modulloader "sichtbar" werden. Wenn der Pfad eines Moduls mit einem der Muster übereinstimmt, kann es in der Testumgebung nicht per require() geladen werden.
Diese Muster werden gegen den vollständigen Pfad geprüft. Verwenden Sie den Platzhalter <rootDir>, um Ihren Projekt-Root-Pfad einzubinden und zu vermeiden, dass fälschlich Dateien ignoriert werden – besonders in Umgebungen mit unterschiedlichen Root-Verzeichnissen.
- 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>]
Standard: []
Eine Alternative zum Setzen der NODE_PATH-Umgebungsvariable. modulePaths ist ein Array absoluter Pfade zu zusätzlichen Orten, die bei der Modulauflösung durchsucht werden. Verwenden Sie <rootDir>, um den Pfad zum Projektstammverzeichnis einzubeziehen.
- 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]
Standard: false
Aktiviert systemeigene Betriebssystem-Benachrichtigungen für Testergebnisse. Für Benachrichtigungen benötigt Jest das Paket node-notifier, das zusätzlich installiert werden muss:
- 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
macOS: Erlauben Sie Benachrichtigungen von terminal-notifier unter Systemeinstellungen > Benachrichtigungen & Fokus.
Windows: Beim ersten Aufruf erstellt node-notifier einen neuen Startmenü-Eintrag und zeigt keine Benachrichtigung an. Ab dem zweiten Durchlauf werden Benachrichtigungen korrekt angezeigt.
notifyMode [string]
Standardwert: failure-change
Legt den Benachrichtigungsmodus fest. Erfordert notify: true.
Modi
-
always: Sendet immer eine Benachrichtigung. -
failure: Sendet eine Benachrichtigung bei fehlgeschlagenen Tests. -
success: Sendet eine Benachrichtigung bei bestandenen Tests. -
change: Sendet eine Benachrichtigung bei Statusänderungen. -
success-change: Sendet eine Benachrichtigung bei bestandenen Tests oder einmalig bei Fehlschlag. -
failure-change: Sendet eine Benachrichtigung bei fehlgeschlagenen Tests oder einmalig bei Erfolg.
openHandlesTimeout [number]
Standardwert: 1000
Zeigt eine Warnung an, wenn Jest nicht sauber beendet wird und nach Abschluss für diese Millisekundenanzahl wahrscheinlich offene Handles vorhanden sind. Verwende 0, um die Warnung zu deaktivieren.
preset [string]
Standard: undefined
Ein Preset, das als Basis für Jests Konfiguration dient. Ein Preset sollte auf ein npm-Modul verweisen, das im Root eine jest-preset.json, jest-preset.js, jest-preset.cjs oder jest-preset.mjs Datei enthält.
Zum Beispiel wird das Preset foo-bar/jest-preset.js wie folgt konfiguriert:
- 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 können auch relative Dateisystempfade sein:
- 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;
Wenn zusätzlich rootDir angegeben ist, erfolgt die Auflösung dieser Datei relativ zu diesem Root-Verzeichnis.
prettierPath [string]
Standardwert: 'prettier'
Legt den Pfad zum prettier-Node-Modul fest, das für die Aktualisierung von Inline-Snapshots verwendet wird.
projects [array<string | ProjectConfig>]
Standard: undefined
Wenn die projects-Konfiguration ein Array von Pfaden oder Glob-Mustern enthält, führt Jest Tests in allen angegebenen Projekten gleichzeitig aus. Dies eignet sich hervorragend für Monorepos oder bei der Arbeit an mehreren Projekten.
- 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;
Diese Beispielkonfiguration führt Jest im Root-Verzeichnis sowie in jedem Ordner des examples-Verzeichnisses aus. Es können beliebig viele Projekte in derselben Jest-Instanz laufen.
Die Projekte-Funktion kann auch verwendet werden, um mehrere Konfigurationen oder Runner auszuführen. Dazu kann ein Array von Konfigurationsobjekten übergeben werden. Beispiel zum gleichzeitigen Ausführen von Tests und ESLint (via jest-runner-eslint):
- 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;
Bei Verwendung des Multi-Project-Runners wird empfohlen, jedem Projekt einen displayName hinzuzufügen. Dadurch wird der displayName neben den Tests des Projekts angezeigt.
Bei aktivierter projects-Option kopiert Jest die Root-Level-Konfigurationsoptionen während des Testlaufs in jede individuelle Child-Konfiguration und löst deren Werte im Kontext des Childs auf. Das bedeutet, dass Platzhalter wie <rootDir> auf das Root-Verzeichnis des Childs verweisen, selbst wenn sie in der Root-Konfiguration definiert sind.
randomize [boolean]
Standard: false
Entspricht dem Flag --randomize, um die Reihenfolge der Tests in einer Datei zu randomisieren.
reporters [array<moduleName | [moduleName, options]>]
Standard: undefined
Verwende diese Konfigurationsoption, um Reporter zu Jest hinzuzufügen. Es muss eine Liste von Reporter-Namen sein. Zusätzliche Optionen können über die Tupel-Form übergeben werden:
- 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;
Standard-Reporter
Wenn benutzerdefinierte Reporter angegeben werden, überschreibt dies den Standard-Jest-Reporter. Wenn Sie ihn beibehalten möchten, muss 'default' als Reporter-Name übergeben werden:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
reporters: [
'default',
['jest-junit', {outputDirectory: 'reports', outputName: 'report.xml'}],
],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
reporters: [
'default',
['jest-junit', {outputDirectory: 'reports', outputName: 'report.xml'}],
],
};
export default config;
GitHub Actions Reporter
Bei Aufnahme in die Liste annotiert der integrierte GitHub Actions Reporter geänderte Dateien mit Testfehlermeldungen und gibt (bei Verwendung mit 'silent: false') Logs mit GitHub-Gruppenfunktionen für einfache Navigation aus. Beachten Sie, dass 'default' hier nicht verwendet werden sollte, da 'github-actions' dies bereits übernimmt. Vergessen Sie nicht, auch 'summary' einzubeziehen. Für reine Annotationen reicht der Reporter ohne Optionen, da der Standardwert von 'silent' 'true' ist:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
reporters: [['github-actions', {silent: false}], 'summary'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
reporters: [['github-actions', {silent: false}], 'summary'],
};
export default config;
Zusammenfassungs-Reporter
Der Zusammenfassungs-Reporter gibt eine Übersicht aller Tests aus. Er ist Teil des Standard-Reporters und wird aktiviert, wenn 'default' in der Liste enthalten ist. Beispielsweise können Sie ihn als eigenständigen Reporter anstelle des Standard-Reporters oder zusammen mit dem Silent Reporter verwenden:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
reporters: ['jest-silent-reporter', 'summary'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
reporters: ['jest-silent-reporter', 'summary'],
};
export default config;
Der summary-Reporter akzeptiert Optionen. Da er im default-Reporter enthalten ist, können Sie Optionen auch dort übergeben.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
reporters: [['default', {summaryThreshold: 10}]],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
reporters: [['default', {summaryThreshold: 10}]],
};
export default config;
Die Option summaryThreshold funktioniert folgendermaßen: Wenn die Gesamtzahl der Test-Suites diesen Schwellenwert überschreitet, wird nach allen Tests eine detaillierte Zusammenfassung fehlgeschlagener Tests ausgegeben. Der Standardwert ist 20.
Benutzerdefinierte Reporter
Sie hungern nach Reportern? Werfen Sie einen Blick auf die umfangreiche Liste beeindruckender Reporter von Awesome Jest.
Ein benutzerdefiniertes Reporter-Modul muss eine Klasse exportieren, die globalConfig, reporterOptions und reporterContext als Konstruktorargumente entgegennimmt:
class CustomReporter {
constructor(globalConfig, reporterOptions, reporterContext) {
this._globalConfig = globalConfig;
this._options = reporterOptions;
this._context = reporterContext;
}
onRunComplete(testContexts, results) {
console.log('Custom reporter output:');
console.log('global config:', this._globalConfig);
console.log('options for this reporter from Jest config:', this._options);
console.log('reporter context passed from test scheduler:', this._context);
}
// Optionally, reporters can force Jest to exit with non zero code by returning
// an `Error` from `getLastError()` method.
getLastError() {
if (this._shouldFail) {
return new Error('Custom error reported!');
}
}
}
module.exports = CustomReporter;
Die vollständige Liste der Hooks und Argumenttypen finden Sie in der Reporter-Schnittstelle unter packages/jest-reporters/src/types.ts.
resetMocks [boolean]
Standard: false
Setzt den Mock-Zustand vor jedem Test automatisch zurück. Entspricht dem Aufruf von jest.resetAllMocks() vor jedem Test. Entfernt gefälschte Implementierungen aus Mocks, stellt aber keine ursprünglichen Implementierungen wieder her.
resetModules [boolean]
Standard: false
Standardmäßig hat jede Testdatei eine unabhängige Modul-Registry. resetModules setzt diese Registry zusätzlich vor jedem einzelnen Test zurück. Dies isoliert Module zwischen Tests und verhindert Konflikte im lokalen Modulzustand. Entspricht programmatischem Aufruf von jest.resetModules().
resolver [string]
Standard: undefined
Ermöglicht die Verwendung eines benutzerdefinierten Resolvers. Dieses Modul muss entweder exportieren:
-
Eine Funktion, die einen String (Pfad) als erstes Argument und ein Optionsobjekt als zweites erwartet. Muss einen Pfad zum Modul zurückgeben oder einen Fehler werfen, wenn das Modul nicht gefunden wird. oder
-
Ein Objekt mit
async- und/odersync-Eigenschaften.syncmuss eine Funktion obiger Form sein,asyncmuss eine gleichartige Funktion sein, die ein Promise mit dem Pfad oder einem Fehler zurückgibt.
Das an Resolver übergebene Optionsobjekt hat folgende Form:
type ResolverOptions = {
/** Directory to begin resolving from. */
basedir: string;
/** List of export conditions. */
conditions?: Array<string>;
/** Instance of default resolver. */
defaultResolver: (path: string, options: ResolverOptions) => string;
/** Instance of default async resolver. */
defaultAsyncResolver: (
path: string,
options: ResolverOptions,
) => Promise<string>;
/** List of file extensions to search in order. */
extensions?: Array<string>;
/** List of directory names to be looked up for modules recursively. */
moduleDirectory?: Array<string>;
/** List of `require.paths` to use if nothing is found in `node_modules`. */
paths?: Array<string>;
/** Current root directory. */
rootDir?: string;
};
Der als Option übergebene defaultResolver ist der Standard-Resolver von Jest, der beim Schreiben eines eigenen Resolvers nützlich sein kann. Er nimmt dieselben Argumente wie ein benutzerdefinierter synchroner Resolver entgegen, z.B. (path, options), und gibt einen String zurück oder wirft einen Fehler.
Ebenso ist der defaultAsyncResolver der standardmäßige asynchrone Resolver, der dieselben Argumente entgegennimmt und ein Promise zurückgibt, das entweder mit einem String aufgelöst oder mit einem Fehler abgelehnt wird.
Wenn Sie beispielsweise Browserifys "browser"-Feld berücksichtigen möchten, können Sie folgenden Resolver verwenden:
const browserResolve = require('browser-resolve');
module.exports = browserResolve.sync;
Und diesen der Jest-Konfiguration hinzufügen:
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
resolver: '<rootDir>/resolver.js',
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
resolver: '<rootDir>/resolver.js',
};
export default config;
Jests jest-resolve basiert auf unrs-resolver. Wir können zusätzliche Optionen übergeben, z.B. die Änderung von mainFields für die Auflösung. Für React Native-Projekte könnten Sie beispielsweise diese Konfiguration verwenden:
module.exports = (path, options) => {
// Call the defaultResolver, so we leverage its cache, error handling, etc.
return options.defaultResolver(path, {
...options,
// `unrs-resolver` option: https://github.com/unrs/unrs-resolver#main-field
mainFields: ['react-native', 'main'],
});
};
Sie können defaultResolver auch nutzen, um einen "Pre-Processor" zu implementieren, der beeinflusst, wie der Standard-Resolver Module auflöst. Angenommen, ein TypeScript-Projekt muss zur Laufzeit auf .js-Dateien verweisen, führt Jest aber Tests für .ts-Dateien aus:
module.exports = (path, options) => {
// Dynamic imports within our codebase that reference .js need to reference
// .ts during tests.
if (
!options.basedir.includes('node_modules') &&
path.endsWith('.js') &&
(path.startsWith('../') || path.startsWith('./'))
) {
path = path.replace(/\.js$/, '.ts');
}
// Call the defaultResolver, so we leverage its cache, error handling, etc.
return options.defaultResolver(path, options);
};
restoreMocks [boolean]
Standard: false
Stellt automatisch vor jedem Test den ursprünglichen Zustand und die Implementierung von Mocks wieder her. Entspricht dem Aufruf von jest.restoreAllMocks() vor jedem Test. Dadurch werden Fälschungen entfernt und die Originalimplementierung wiederhergestellt.
rootDir [string]
Standardwert: Das Wurzelverzeichnis mit Ihrer Jest-Konfigurationsdatei oder package.json oder pwd, falls keine package.json gefunden wird
Das Stammverzeichnis, in dem Jest nach Tests und Modulen suchen soll. Wenn Ihre Jest-Konfiguration in der package.json liegt und das Wurzelverzeichnis Ihres Repos sein soll, wird standardmäßig das Verzeichnis der package.json verwendet.
Oft setzt man dies auf 'src' oder 'lib', entsprechend dem Speicherort Ihres Codes im Repository.
Durch Verwendung von '<rootDir>' als Platzhalter in pfadbasierten Konfigurationseinstellungen wird auf diesen Wert verwiesen. Wenn beispielsweise ein setupFiles-Eintrag auf die Datei some-setup.js im Projektstamm zeigen soll, setzen Sie den Wert auf: '<rootDir>/some-setup.js'.
roots [array<string>]
Standardwert: ["<rootDir>"]
Eine Liste von Verzeichnispfaden, in denen Jest nach Dateien suchen soll.
Manchmal möchten Sie, dass Jest nur in einem Unterverzeichnis sucht (z.B. bei einem src/-Verzeichnis), aber den Zugriff auf den Rest des Repos verhindern.
Während rootDir hauptsächlich als wiederverwendbarer Platzhalter dient, nutzt Jest roots intern zum Auffinden von Testdateien und Quellcode. Dies gilt auch für manuelle Mocks von node_modules-Modulen (dafür muss __mocks__ in einem der roots-Verzeichnisse liegen).
Standardmäßig enthält roots nur <rootDir>, aber bei Projekten mit mehreren Wurzeln können Sie z.B. roots: ["<rootDir>/src/", "<rootDir>/tests/"] setzen.
runtime [string]
Standard: "jest-runtime"
Diese Option ermöglicht die Verwendung einer benutzerdefinierten Runtime zur Ausführung von Testdateien. Eine benutzerdefinierte Runtime kann durch Angabe eines Pfads zu einer Runtime-Implementierung bereitgestellt werden.
Das Runtime-Modul muss eine Klasse exportieren, die die standardmäßige Runtime-Klasse von Jest erweitert oder eine kompatible Schnittstelle mit derselben Konstruktor-Signatur und denselben Methoden implementiert.
Das Erstellen einer benutzerdefinierten Runtime ist ein fortgeschrittener Anwendungsfall. Die meisten Benutzer sollten die Runtime nicht anpassen müssen. Überlege, ob dein Anwendungsfall besser mit benutzerdefinierten Transformern, Testumgebungen oder Modul-Mocks gelöst werden kann.
Beispiel:
const {default: Runtime} = require('jest-runtime');
class CustomRuntime extends Runtime {
//...custom logic
}
module.exports = CustomRuntime;
import Runtime from 'jest-runtime';
export default class CustomRuntime extends Runtime {
//...custom logic
}
Füge die benutzerdefinierte Runtime deiner Jest-Konfiguration hinzu:
- JavaScript
- TypeScript
module.exports = {
runtime: './custom-runtime.js',
};
export default {
runtime: './custom-runtime.ts',
};
runner [string]
Standardwert: "jest-runner"
Diese Option ermöglicht die Verwendung eines benutzerdefinierten Runners statt des Jest-Standardrunners. Beispiele für Runner:
Der Wert der runner-Eigenschaft kann das jest-runner--Präfix des Paketnamens weglassen.
Um einen Test-Runner zu erstellen, exportiere eine Klasse, die im Konstruktor globalConfig akzeptiert und eine runTests-Methode mit folgender Signatur besitzt:
async function runTests(
tests: Array<Test>,
watcher: TestWatcher,
onStart: OnTestStart,
onResult: OnTestSuccess,
onFailure: OnTestFailure,
options: TestRunnerOptions,
): Promise<void>;
Falls dein Test-Runner nur seriell statt parallel ausgeführt werden soll, muss deine Klasse die Eigenschaft isSerial auf true gesetzt haben.
sandboxInjectedGlobals [array<string>]
Umbenannt von extraGlobals in Jest 28.
Standard: undefined
Testdateien werden in einer vm ausgeführt, was Aufrufe von Eigenschaften des globalen Kontexts (z.B. Math) verlangsamt. Mit dieser Option kannst du zusätzliche Eigenschaften festlegen, die innerhalb der VM für schnellere Zugriffe definiert werden.
Wenn deine Tests beispielsweise häufig Math aufrufen, kannst du es durch Setzen von sandboxInjectedGlobals übergeben.
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
sandboxInjectedGlobals: ['Math'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
sandboxInjectedGlobals: ['Math'],
};
export default config;
Diese Option hat keine Wirkung, wenn du nativen ESM verwendest.
setupFiles [array]
Standard: []
Eine Liste von Pfaden zu Modulen, die Code zur Konfiguration oder Einrichtung der Testumgebung ausführen. Jede Setup-Datei wird einmal pro Testdatei ausgeführt. Da jeder Test in seiner eigenen Umgebung läuft, werden diese Skripte in der Testumgebung ausgeführt, bevor setupFilesAfterEnv und vor dem eigentlichen Testcode ausgeführt werden.
Falls dein Setup-Skript ein CJS-Modul ist, kann es eine asynchrone Funktion exportieren. Jest ruft die Funktion auf und wartet auf ihr Ergebnis. Dies kann nützlich sein, um asynchron Daten abzurufen. Bei ESM-Modulen verwende einfach Top-Level-Await für denselben Effekt.
setupFilesAfterEnv [array]
Standard: []
Eine Liste von Pfaden zu Modulen, die Code zur Konfiguration oder Einrichtung des Testframeworks ausführen, bevor jede Testdatei der Suite ausgeführt wird. Während setupFiles vor der Installation des Testframeworks in der Umgebung ausgeführt wird, bietet diese Skriptdatei die Möglichkeit, Code unmittelbar nach der Installation des Testframeworks, aber vor dem eigentlichen Testcode auszuführen.
Mit anderen Worten: setupFilesAfterEnv-Module sind für Code gedacht, der in jeder Testdatei wiederholt wird. Das installierte Testframework macht Jest-Globals, das jest-Objekt und expect in den Modulen zugänglich. Beispielsweise kannst du zusätzliche Matcher aus der Bibliothek jest-extended hinzufügen oder Setup- und Teardown-Hooks aufrufen:
const matchers = require('jest-extended');
expect.extend(matchers);
afterEach(() => {
jest.useRealTimers();
});
- JavaScript
- TypeScript
/** @type {import('jest').Config} */
const config = {
setupFilesAfterEnv: ['<rootDir>/setup-jest.js'],
};
module.exports = config;
import type {Config} from 'jest';
const config: Config = {
setupFilesAfterEnv: ['<rootDir>/setup-jest.js'],
};
export default config;
Falls dein Setup-Skript ein CJS-Modul ist, kann es eine asynchrone Funktion exportieren. Jest ruft die Funktion auf und wartet auf ihr Ergebnis. Dies kann nützlich sein, um asynchron Daten abzurufen. Bei ESM-Modulen verwende einfach Top-Level-Await für denselben Effekt.
showSeed [boolean]
Standard: false
Entspricht dem --showSeed-Flag, um den Seed in der Testzusammenfassung auszugeben.