メインコンテンツへスキップ
バージョン: 29.7

Jestの設定

非公式ベータ版翻訳

このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →

Jestの哲学はデフォルトで優れた動作を提供することですが、時にはより強力な設定機能が必要になることもあります。

設定は専用のJavaScript、TypeScript、JSONファイルで定義することを推奨します。ファイル名がjest.config.js|ts|mjs|cjs|jsonの場合、自動的に検出されます。明示的なファイルパスを渡すには--configフラグを使用できます。

メモ

生成される設定オブジェクトは常にJSONシリアライズ可能でなければならない点にご注意ください。

設定ファイルは単純にオブジェクトをエクスポートする必要があります:

/** @type {import('jest').Config} */
const config = {
verbose: true,
};

module.exports = config;

またはオブジェクトを返す関数:

/** @returns {Promise<import('jest').Config>} */
module.exports = async () => {
return {
verbose: true,
};
};
ヒント

TypeScript設定ファイルを読み取るには、Jestはts-nodeを必要とします。プロジェクトにインストールされていることを確認してください。

設定はJSONファイルにプレーンオブジェクトとして保存することも可能です:

jest.config.json
{
"bail": 1,
"verbose": true
}

別の方法として、プロジェクトのpackage.json内の"jest"キーで設定を定義できます:

package.json
{
"name": "my-project",
"jest": {
"verbose": true
}
}

オプション

情報

必要に応じてJestのデフォルト設定をjest-configから取得して拡張できます:

const {defaults} = require('jest-config');

/** @type {import('jest').Config} */
const config = {
moduleFileExtensions: [...defaults.moduleFileExtensions, 'mts', 'cts'],
};

module.exports = config;

リファレンス

automock [boolean]

デフォルト: false

このオプションは、テストでインポートされるすべてのモジュールを自動的にモックするようJestに指示します。使用される全モジュールはAPIインターフェースを維持した代替実装を持ちます。

例:

utils.js
export default {
authorize: () => 'token',
isAuthorized: secret => secret === 'wizard',
};
__tests__/automock.test.js
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();
});
メモ

手動モックがある場合(例: __mocks__/lodash.js)、Nodeモジュールは自動的にモックされます。詳細はこちらをご覧ください。

fsのようなNode.jsコアモジュールはデフォルトでモックされません。jest.mock('fs')のように明示的にモック可能です。

bail [number | boolean]

デフォルト: 0

デフォルトではJestは全テストを実行し、完了時に全てのエラーをコンソール出力します。この設定オプションにより、n回の失敗後にテスト実行を停止できます。trueに設定することは1に設定することと同等です。

cacheDirectory [string]

デフォルト: "/tmp/<path>"

Jestが依存関係のキャッシュ情報を保存するディレクトリ。

Jestは依存関係ツリーを一度(事前に)スキャンし、その結果をキャッシュすることで、テスト実行時に発生するファイルシステム操作の負荷を軽減しようと試みます。この設定オプションでは、Jestがディスク上にそのキャッシュデータを保存する場所をカスタマイズできます。

clearMocks [boolean]

デフォルト: false

各テストの前にモックの呼び出し、インスタンス、コンテキスト、結果を自動的にクリアします。jest.clearAllMocks()を各テスト前に呼び出すのと同等です。提供されたモックの実装は削除されません。

collectCoverage [boolean]

デフォルト: false

テスト実行中にカバレッジ情報を収集するかどうかを指定します。実行された全ファイルにカバレッジ収集用のステートメントを追加するため、テストの実行速度が大幅に低下する可能性があります。

Jestは2種類のカバレッジプロバイダを提供しています: babel(デフォルト)とv8です。詳細はcoverageProviderオプションを参照してください。

情報

babelカバレッジプロバイダは/* istanbul ignore next */v8プロバイダは/* c8 ignore next */コメントを使用して行をカバレッジレポートから除外します。詳細についてはistanbuljsドキュメントc8ドキュメントを参照してください。

collectCoverageFrom [array]

デフォルト: undefined

カバレッジ情報を収集するファイルセットを示すglobパターンの配列。指定されたglobパターンに一致するファイルについては、そのファイルに対するテストが存在しなくても、テストスイートでrequireされていなくても、カバレッジ情報が収集されます。

/** @type {import('jest').Config} */
const config = {
collectCoverageFrom: [
'**/*.{js,jsx}',
'!**/node_modules/**',
'!**/vendor/**',
],
};

module.exports = config;

プロジェクトのrootDir内にあるファイルのうち、**/node_modules/****/vendor/**に一致するものを除く全てのファイルに対してカバレッジ情報が収集されます。

ヒント

各globパターンは設定内で指定された順序で適用されます。例えば["!**/__tests__/**", "**/*.js"]の場合、否定パターンが2番目のパターンで上書きされるため__tests__が除外されません。否定globを機能させるには、**/*.jsの後に配置する必要があります。

メモ

このオプションを使用するにはcollectCoveragetrueに設定するか、Jestを--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]

デフォルト: undefined

Jestがカバレッジファイルを出力するディレクトリ。

coveragePathIgnorePatterns [array<string>]

デフォルト: ["/node_modules/"]

テスト実行前に全てのファイルパスに対してマッチングされる正規表現パターン文字列の配列。ファイルパスがこれらのパターンのいずれかに一致した場合、カバレッジ情報の収集がスキップされます。

これらのパターン文字列はフルパスに対して照合されます。異なる環境でルートディレクトリが変わる可能性がある場合に誤ってファイルを無視しないよう、プロジェクトルートへのパスを含めるには <rootDir> 文字列トークンを使用してください。例: ["<rootDir>/build/", "<rootDir>/node_modules/"].

coverageProvider [string]

カバレッジ用にコードをインストルメントするプロバイダを指定します。有効な値はbabel(デフォルト)またはv8です。

coverageReporters [array<string | [string, options]>]

デフォルト: ["clover", "json", "lcov", "text"]

カバレッジレポートを作成する際にJestが使用するレポーター名のリスト。istanbulレポーターを任意に使用できます。

ヒント

このオプションを設定するとデフォルト値が上書きされます。コンソール出力でカバレッジ概要を表示するには"text"または"text-summary"を追加してください。

タプル形式を使用して追加オプションを渡せます。例えば、完全にカバーされたファイルのレポート行をすべて非表示にするには:

/** @type {import('jest').Config} */
const config = {
coverageReporters: ['clover', 'json', 'lcov', ['text', {skipFull: true}]],
};

module.exports = config;

オプションオブジェクトの形状に関する詳細は、型定義内のCoverageReporterWithOptions型を参照してください。

coverageThreshold [オブジェクト]

デフォルト: undefined

カバレッジ結果の最小しきい値適用を設定します。しきい値はglobalglobパターン、ディレクトリ/ファイルパスで指定可能です。しきい値が満たされない場合、Jestは失敗します。正の数値は最低必要パーセンテージ、負の数値は許容される未カバーエンティティの最大数を表します。

例えば次の設定では、ブランチ・行・関数カバレッジが80%未満、または未カバーのステートメントが10個以上ある場合に失敗します:

/** @type {import('jest').Config} */
const config = {
coverageThreshold: {
global: {
branches: 80,
functions: 80,
lines: 80,
statements: -10,
},
},
};

module.exports = config;

globやパスがglobalと併せて指定された場合、一致するパスのカバレッジデータは全体から差し引かれ、しきい値は個別に適用されます。globのしきい値は該当する全ファイルに適用されます。パス指定ファイルが見つからない場合はエラーが返されます。

例えば次の設定では:

/** @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;

Jestは以下の場合に失敗します:

  • ./src/componentsディレクトリのブランチまたはステートメントカバレッジが40%未満の場合

  • ./src/reducers/**/*.js globに一致するファイルのステートメントカバレッジが90%未満の場合

  • ./src/api/very-important-module.jsファイルのカバレッジが100%未満の場合

  • 残りの全ファイルの合計カバレッジが50%未満の場合(global

dependencyExtractor [文字列]

デフォルト: undefined

カスタム依存関係抽出ツールを使用できます。extract関数を持つオブジェクトをエクスポートするNodeモジュールである必要があります。例:

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');
},
};

extract関数は、コード内で見つかった依存関係を含む反復可能オブジェクト(ArraySetなど)を返す必要があります。

このモジュールにはgetCacheKey関数を含められ、キャッシュキーを生成してロジック変更を検出し、関連するキャッシュを破棄できます。

displayName [文字列, オブジェクト]

デフォルト: undefined

テスト実行時にラベルを併せて表示できます。マルチプロジェクトリポジトリで多くのJest設定ファイルがある場合に特に有用で、テストが属するプロジェクトを視覚的に判別できます。

/** @type {import('jest').Config} */
const config = {
displayName: 'CLIENT',
};

module.exports = config;

代わりにnamecolorプロパティを持つオブジェクトを渡せます。これによりdisplayNameの背景色をカスタマイズ可能です。displayNameは文字列値の場合、デフォルトで白になります。Jestは色指定にchalkを使用するため、chalkがサポートする全ての色オプションが利用可能です。

/** @type {import('jest').Config} */
const config = {
displayName: {
name: 'CLIENT',
color: 'blue',
},
};

module.exports = config;

errorOnDeprecated [ブール値]

デフォルト: false

非推奨APIの呼び出し時に有用なエラーメッセージをスローします。アップグレードプロセスを円滑にするのに役立ちます。

extensionsToTreatAsEsm [配列<文字列>]

デフォルト: []

Jest は、最も近い package.jsontype フィールドが module に設定されている .mjs および .js ファイルを ECMAScript モジュールとして実行します。ネイティブの ESM で実行する必要があるその他のファイルがある場合は、ここでファイル拡張子を指定する必要があります。

/** @type {import('jest').Config} */
const config = {
extensionsToTreatAsEsm: ['.ts'],
};

module.exports = config;
注意

Jest の ESM サポートはまだ試験段階です。詳細は公式ドキュメントを参照してください。

fakeTimers [object]

デフォルト: {}

フェイクタイマーは、テストで長時間のタイムアウトを待機したくない場合に便利です。詳細はフェイクタイマーガイドAPI ドキュメントを参照してください。

このオプションは、すべてのテストで使用されるフェイクタイマーのデフォルト設定を提供します。テストファイル内で jest.useFakeTimers() を呼び出すと、これらのオプションが使用されるか、設定オブジェクトが渡された場合は上書きされます。たとえば、process.nextTick() の元の実装を維持し、実行される再帰タイマーの制限を調整するように Jest に指示できます:

/** @type {import('jest').Config} */
const config = {
fakeTimers: {
doNotFake: ['nextTick'],
timerLimit: 1000,
},
};

module.exports = config;
fakeTime.test.js
// 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});
// ...
});
ヒント

各テストファイルで jest.useFakeTimers() を記述する代わりに、Jest 設定で全てのテストに対してグローバルにフェイクタイマーを有効化できます:

/** @type {import('jest').Config} */
const config = {
fakeTimers: {
enableGlobally: true,
},
};

module.exports = config;

設定オプション:

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;
};
レガシーなフェイクタイマー

何らかの理由でレガシーなフェイクタイマーの実装を使用する必要がある場合、以下の方法でグローバルに有効化できます(追加オプションはサポートされません):

/** @type {import('jest').Config} */
const config = {
fakeTimers: {
enableGlobally: true,
legacyFakeTimers: true,
},
};

module.exports = config;

forceCoverageMatch [array<string>]

デフォルト: ['']

通常、テストファイルはコードカバレッジの収集対象から除外されます。このオプションを使用すると、この動作を上書きして除外されるファイルをコードカバレッジに含められます。

たとえば、以下のように .t.js 拡張子のソースファイルにテストがある場合:

sum.t.js
export function sum(a, b) {
return a + b;
}

if (process.env.NODE_ENV === 'test') {
test('sum', () => {
expect(sum(1, 2)).toBe(3);
});
}

forceCoverageMatch を設定することで、これらのファイルからカバレッジを収集できます:

/** @type {import('jest').Config} */
const config = {
forceCoverageMatch: ['**/*.t.js'],
};

module.exports = config;

globals [object]

デフォルト: {}

すべてのテスト環境で利用可能にする必要があるグローバル変数のセットです。

たとえば、以下の設定はすべてのテスト環境でグローバル変数 __DEV__true に設定します:

/** @type {import('jest').Config} */
const config = {
globals: {
__DEV__: true,
},
};

module.exports = config;
メモ

ここでオブジェクトや配列などの参照値を指定し、テスト実行中にその値が変更された場合、その変更は他のテストファイルでは保持されません。また、globals オブジェクトは JSON シリアライズ可能である必要があるため、グローバル関数の指定には使用できません。その場合は setupFiles を使用してください。

globalSetup [string]

デフォルト: undefined

このオプションはカスタムのグローバルセットアップモジュールを使用可能にします。モジュールは関数(同期/非同期可)をエクスポートする必要があり、すべてのテストスイートの前に1回トリガーされます。関数はJestのglobalConfigprojectConfigの2つの引数を受け取ります。

情報

マルチプロジェクトランナーを使用するプロジェクトで設定されたグローバルセットアップモジュールは、そのプロジェクトから少なくとも1つのテストを実行した場合にのみトリガーされます。

globalSetupで定義されたグローバル変数はglobalTeardown内でのみ読み取り可能です。テストスイート内では取得できません。

リンクされたセットアップファイルにはコード変換が適用されますが、Jestはnode_modules内のコードを変換しません。これは変換を実行する実際のトランスフォーマー(例: babeltypescript)をロードする必要があるためです。

setup.js
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;
};
teardown.js
module.exports = async function (globalConfig, projectConfig) {
console.log(globalConfig.testPathPattern);
console.log(projectConfig.cache);

await globalThis.__MONGOD__.stop();
};

globalTeardown [string]

デフォルト: undefined

このオプションはカスタムのグローバルティーダウンモジュールを使用可能にします。モジュールは関数(同期/非同期可)をエクスポートする必要があり、すべてのテストスイートの後に1回トリガーされます。関数はJestのglobalConfigprojectConfigの2つの引数を受け取ります。

情報

マルチプロジェクトランナーを使用するプロジェクトで設定されたグローバルティーダウンモジュールは、そのプロジェクトから少なくとも1つのテストを実行した場合にのみトリガーされます。

node_modulesの変換に関する注意点はglobalSetupと同様にglobalTeardownにも適用されます。

haste [object]

デフォルト: undefined

Jestの内部ファイルクローラー/キャッシュシステムであるjest-haste-mapの動作を設定します。以下のオプションがサポートされています:

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]

デフォルト: true

Jestのグローバルオブジェクト(expect, test, describe, beforeEachなど)をグローバル環境に挿入します。falseに設定する場合は@jest/globalsからインポートする必要があります。例:

import {expect, jest, test} from '@jest/globals';

jest.useFakeTimers();

test('some test', () => {
expect(Date.now()).toBe(0);
});
メモ

このオプションはデフォルトのjest-circusテストランナーを使用する場合にのみサポートされます。

maxConcurrency [number]

デフォルト: 5

test.concurrentを使用する際に同時に実行できるテスト数の上限を設定します。この制限を超えるテストはキューに入れられ、スロットが空き次第実行されます。

maxWorkers [number | string]

テスト実行用のワーカープールが生成する最大ワーカー数を指定します。シングル実行モードではデフォルトで(メインスレッドを除く)使用可能なCPUコア数となります。ウォッチモードではマシンの負荷を抑えるため、使用可能コア数の半分がデフォルト値です。CIのようなリソース制限環境では調整が有用ですが、ほとんどのケースではデフォルト設定で十分です。

利用可能なCPU数が変動する環境では、パーセンテージベースの設定が使用できます:

/** @type {import('jest').Config} */
const config = {
maxWorkers: '50%',
};

module.exports = config;

moduleDirectories [array<string>]

デフォルト: ["node_modules"]

モジュールのrequire位置から再帰的に検索されるディレクトリ名の配列です。このオプションを設定するとデフォルト動作が上書きされます。node_modulesの検索を維持したい場合は他のオプションと共に明示的に含めてください:

/** @type {import('jest').Config} */
const config = {
moduleDirectories: ['node_modules', 'bower_components'],
};

module.exports = config;
注意

'.'moduleDirectories の一つとして使用することは推奨されません。これにより @emotion/react のようなスコープ付きパッケージが同じサブディレクトリ名(react)を持つパッケージにアクセスできなくなる可能性があります。詳細はこちらの課題をご覧ください。ほとんどの場合、代わりにmoduleNameMapper設定を使用することが推奨されます。

moduleFileExtensions [配列<文字列>]

デフォルト: ["js", "mjs", "cjs", "jsx", "ts", "tsx", "json", "node"]

モジュールが使用するファイル拡張子の配列。ファイル拡張子を指定せずにモジュールをrequireする場合、Jestはこの配列を左から右の順序で検索します。

プロジェクトで最も頻繁に使用される拡張子を配列の左側に配置することを推奨します。TypeScriptを使用している場合は、"ts"や"tsx"を配列の先頭に移動することを検討してください。

moduleNameMapper [オブジェクト<文字列, 文字列 | 配列<文字列>>]

デフォルト: null

正規表現からモジュール名(またはモジュール名の配列)へのマッピング。これにより画像やスタイルなどのリソースを単一のモジュールでスタブ化できます。

エイリアスにマッピングされたモジュールは、自動モックの設定に関わらず常にモック化されません。

ファイルパスを使用する場合、rootDirの値を参照するには<rootDir>文字列トークンを使用します。

さらに、番号付き後方参照を使用してキャプチャした正規表現グループを置換できます。

/** @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;

マッピングの定義順序は重要です。パターンは条件に合致するまで順番にチェックされ、最も具体的なルールを最初にリストする必要があります。これはモジュール名の配列にも適用されます。

情報

境界指定子^$なしでモジュール名を指定すると、発見が難しいエラーが発生する可能性があります。例: relayは名前の一部にrelayを含むすべてのモジュール(relay, react-relay, graphql-relay)をスタブに置換します。

modulePathIgnorePatterns [配列<文字列>]

デフォルト: []

モジュールローダーに「可視」と見なされる前に、すべてのモジュールパスに対して照合される正規表現パターン文字列の配列。モジュールのパスがこれらのパターンのいずれかに一致する場合、テスト環境でrequire()できなくなります。

これらのパターン文字列はフルパスに対してマッチングします。プロジェクトのルートディレクトリへのパスを含めるには<rootDir>文字列トークンを使用し、異なる環境でルートディレクトリが異なる場合に誤ってすべてのファイルを無視するのを防ぎます。

/** @type {import('jest').Config} */
const config = {
modulePathIgnorePatterns: ['<rootDir>/build/'],
};

module.exports = config;

modulePaths [配列<文字列>]

デフォルト: []

NODE_PATH環境変数を設定する代替API。modulePathsはモジュール解決時に追加で検索する絶対パスの配列です。プロジェクトのルートディレクトリパスを含めるには<rootDir>文字列トークンを使用します。

/** @type {import('jest').Config} */
const config = {
modulePaths: ['<rootDir>/app/'],
};

module.exports = config;

notify [真偽値]

デフォルト: false

テスト結果のネイティブOS通知を有効化します。通知を表示するにはJestがnode-notifierパッケージを必要とし、追加でインストールする必要があります:

npm install --save-dev node-notifier
ヒント

macOSの場合: システム設定 > 通知 でterminal-notifierからの通知を許可してください。

Windowsの場合: node-notifierは初回使用時にスタートメニューに新規エントリを作成し、通知を表示しません。通知は次回実行以降に正しく表示されます。

notifyMode [文字列]

デフォルト: failure-change

通知モードを指定します。notify: true が設定されている必要があります。

モード

  • always: 常に通知を送信します。

  • failure: テストが失敗した場合に通知を送信します。

  • success: テストが成功した場合に通知を送信します。

  • change: ステータスが変化した場合に通知を送信します。

  • success-change: テストが成功した場合、または初回の失敗時に通知を送信します。

  • failure-change: テストが失敗した場合、または初回の成功時に通知を送信します。

openHandlesTimeout [number]

デフォルト: 1000

Jestが正常終了しない場合、完了後このミリ秒数が経過すると未解決のハンドルが存在する可能性を示す警告を出力します。0を設定すると警告を無効化します。

preset [string]

デフォルト: undefined

Jestの基本設定として使用されるプリセット。ルートディレクトリにjest-preset.jsonjest-preset.jsjest-preset.cjsjest-preset.mjsのいずれかを持つnpmモジュールを指定します。

例えば、プリセットfoo-bar/jest-preset.jsは次のように設定されます:

/** @type {import('jest').Config} */
const config = {
preset: 'foo-bar',
};

module.exports = config;

ファイルシステムパスからの相対指定も可能です:

/** @type {import('jest').Config} */
const config = {
preset: './node_modules/foo-bar/jest-preset.js',
};

module.exports = config;
情報

rootDirも指定している場合、このファイルの解決はルートディレクトリからの相対パスで行われます。

prettierPath [string]

デフォルト: 'prettier'

インラインスナップショットの更新に使用されるprettierモジュールのパスを設定します。

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.

package.json
{
"devDependencies": {
"prettier-2": "npm:prettier@^2"
}
}
/** @type {import('jest').Config} */
const config = {
prettierPath: require.resolve('prettier-2'),
};

module.exports = 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>]

デフォルト: undefined

projects設定にパスやglobパターンの配列を指定すると、Jestはすべての指定されたプロジェクトのテストを同時に実行します。モノレポや複数プロジェクトを同時に扱う場合に便利です。

/** @type {import('jest').Config} */
const config = {
projects: ['<rootDir>', '<rootDir>/examples/*'],
};

module.exports = config;

この設定例では、ルートディレクトリとexamplesディレクトリの全フォルダでJestが実行されます。単一のJestインスタンスで無制限のプロジェクトを実行可能です。

projects機能は複数の設定やランナーを同時に実行するためにも使用できます。設定オブジェクトの配列を渡すことで実現可能です。例: 単一のJest実行でテストとESLint(jest-runner-eslint経由)を同時に実行する場合:

/** @type {import('jest').Config} */
const config = {
projects: [
{
displayName: 'test',
},
{
displayName: 'lint',
runner: 'jest-runner-eslint',
testMatch: ['<rootDir>/**/*.js'],
},
],
};

module.exports = config;
ヒント

マルチプロジェクトランナーを使用する際は、各プロジェクトにdisplayNameを追加することを推奨します。これによりテストの横にプロジェクトのdisplayNameが表示されます。

メモ

projectsオプションを有効にすると、Jestはルートレベルの設定オプションを各子プロジェクト設定にコピーし、子プロジェクトのコンテキストで値を解決します。つまり<rootDir>のような文字列トークンは、ルート設定で定義されていても子プロジェクトのルートディレクトリを指します。

randomize [boolean]

デフォルト: false

--randomizeフラグと同等で、ファイル内のテスト順序をランダム化します。

reporters [array<moduleName | [moduleName, options]>]

デフォルト: undefined

この設定オプションでJestにレポーターを追加します。レポーター名のリストで指定し、タプル形式で追加オプションを渡せます:

/** @type {import('jest').Config} */
const config = {
reporters: [
'default',
['<rootDir>/custom-reporter.js', {banana: 'yes', pineapple: 'no'}],
],
};

module.exports = config;

デフォルトレポーター

カスタムレポーターが指定されている場合、デフォルトのJestレポーターは上書きされます。デフォルトレポーターを維持したい場合は、レポーター名として'default'を渡す必要があります:

/** @type {import('jest').Config} */
const config = {
reporters: [
'default',
['jest-junit', {outputDirectory: 'reports', outputName: 'report.xml'}],
],
};

module.exports = config;

GitHub Actions レポーター

リストに含まれている場合、組み込みのGitHub Actionsレポーターは変更されたファイルにテスト失敗メッセージの注釈を付け、('silent: false'と併用した場合)GitHubのグループ機能を使用したログを出力してナビゲーションを容易にします。'github-actions'がデフォルトの処理も行うため、この場合'default'は使用せず、代わりに必ず'summary'も含めてください。注釈のみに使用したい場合は、オプションなしでレポーターを指定します('silent'のデフォルト値は'true'です):

/** @type {import('jest').Config} */
const config = {
reporters: [['github-actions', {silent: false}], 'summary'],
};

module.exports = config;

サマリーレポーター

サマリーレポーターはすべてのテストの概要を出力します。これはデフォルトレポーターの一部であるため、リストに'default'が含まれている場合に有効になります。たとえば、デフォルトの代わりにスタンドアロンのレポーターとして、またはサイレントレポーターと組み合わせて使用できます:

/** @type {import('jest').Config} */
const config = {
reporters: ['jest-silent-reporter', 'summary'],
};

module.exports = config;

summaryレポーターはオプションを受け付けます。defaultレポーターに含まれているため、オプションを渡すことも可能です。

/** @type {import('jest').Config} */
const config = {
reporters: [['default', {summaryThreshold: 10}]],
};

module.exports = config;

summaryThresholdオプションは次のように動作します:テストスイートの総数がこの閾値を超える場合、すべてのテスト実行後に失敗したテストの詳細な概要が出力されます。デフォルト値は20です。

カスタムレポーター

ヒント

レポーターをお探しですか?Awesome Jestの優れたレポーター一覧をご覧ください。

カスタムレポーターモジュールは、コンストラクター引数としてglobalConfigreporterOptionsreporterContextを受け取るクラスをエクスポートする必要があります:

custom-reporter.js
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;
メモ

フックと引数タイプの完全なリストについては、packages/jest-reporters/src/types.tsReporterインターフェースを参照してください。

resetMocks [boolean]

デフォルト: false

各テストの前にモックの状態を自動的にリセットします。jest.resetAllMocks()を各テスト前に呼び出すのと同等です。これによりモックの偽装実装は削除されますが、元の実装は復元されません。

resetModules [boolean]

デフォルト: false

デフォルトでは、各テストファイルは独立したモジュールレジストリを持ちます。resetModulesを有効にすると、さらに一歩進んで各テストの実行前にモジュールレジストリをリセットします。これはテスト間でローカルモジュール状態が競合しないようにするのに有用です。プログラムでjest.resetModules()を使用しても同様の効果が得られます。

resolver [string]

デフォルト: undefined

このオプションはカスタムリゾルバーの使用を許可します。このリゾルバーは次のいずれかをエクスポートするモジュールである必要があります:

  1. 解決するパスの文字列を第一引数、オプションオブジェクトを第二引数として受け取る関数。モジュールが見つからない場合はエラーをスローし、見つかった場合は解決されたモジュールへのパスを返す必要があります。または

  2. asyncおよび/またはsyncプロパティを含むオブジェクト。syncプロパティは上記の形状の関数であり、asyncプロパティも同じ引数を受け取る関数で、モジュールへのパスで解決されるPromiseを返すか、エラーで拒否されます。

リゾルバーに提供されるオプションオブジェクトは次の形状です:

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;
/** 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>;
/** Allows transforming parsed `package.json` contents. */
packageFilter?: (pkg: PackageJSON, file: string, dir: string) => PackageJSON;
/** Allows transforms a path within a package. */
pathFilter?: (pkg: PackageJSON, path: string, relativePath: string) => string;
/** Current root directory. */
rootDir?: string;
};
ヒント

オプションとして渡される defaultResolver は Jest のデフォルトリゾルバです。カスタムリゾルバを作成する際に有用です。カスタム同期リゾルバと同じ引数(例: (path, options))を受け取り、文字列を返すか例外をスローします。

例えば、Browserify の "browser" フィールドを尊重したい場合、次のリゾルバを使用できます:

resolver.js
const browserResolve = require('browser-resolve');

module.exports = browserResolve.sync;

これを Jest 設定に追加します:

/** @type {import('jest').Config} */
const config = {
resolver: '<rootDir>/resolver.js',
};

module.exports = config;

defaultResolverpackageFilterを組み合わせることで、デフォルトリゾルバがモジュールを解決する方法を変更できるpackage.json「プリプロセッサ」を実装できます。例えば、"module"フィールドが存在する場合はそれを使用し、なければ"main"にフォールバックする例:

module.exports = (path, options) => {
// Call the defaultResolver, so we leverage its cache, error handling, etc.
return options.defaultResolver(path, {
...options,
// Use packageFilter to process parsed `package.json` before the resolution (see https://www.npmjs.com/package/resolve#resolveid-opts-cb)
packageFilter: pkg => {
return {
...pkg,
// Alter the value of `main` before resolving the package
main: pkg.module || pkg.main,
};
},
});
};

restoreMocks [boolean]

デフォルト: false

各テスト前にモックの状態と実装を自動的に復元します。各テスト前に jest.restoreAllMocks() を呼び出すのと同等です。これによりすべてのモックの偽装実装が削除され、元の実装が復元されます。

rootDir [string]

デフォルト: Jest 設定ファイル を含むディレクトリのルート、または package.json があるディレクトリ、または package.json が見つからない場合は pwd

Jest がテストとモジュールをスキャンするルートディレクトリ。Jest 設定を package.json 内に配置し、ルートディレクトリをリポジトリのルートにしたい場合、この設定値は package.json のディレクトリがデフォルトになります。

多くの場合、コードが保存されている場所に対応して 'src''lib' に設定することが推奨されます。

ヒント

他のパスベースの設定で '<rootDir>' 文字列トークンを使用すると、この値が参照されます。例えばプロジェクトルートの some-setup.js ファイルを setupFiles エントリで指定する場合: '<rootDir>/some-setup.js'

roots [array<string>]

デフォルト: ["<rootDir>"]

Jest がファイル検索に使用するディレクトリパスのリスト。

特定のサブディレクトリ(リポジトリ内の src/ ディレクトリなど)のみを検索対象にし、リポジトリの他の部分へのアクセスを制限したい場合があります。

情報

rootDir が他の設定オプションで再利用されるトークンとして主に使用されるのに対し、roots は Jest 内部でテストファイルとソースファイルを特定するために使用されます。node_modules からのモジュールに対する手動モックを検索する際(__mocks__roots のいずれかに存在する必要がある)にも適用されます。

デフォルトでは roots は単一のエントリ <rootDir> を持ちますが、プロジェクト内に複数のルートが必要な場合(例: roots: ["<rootDir>/src/", "<rootDir>/tests/"])もあります。

runtime [string]

デフォルト: "jest-runtime"

このオプションはテストファイルの実行にカスタムランタイムを使用することを可能にします。ランタイム実装へのパスを指定することでカスタムランタイムを提供できます。

ランタイムモジュールは、JestのデフォルトRuntimeクラスを拡張するクラス、または同じコンストラクタシグネチャとメソッドを持つ互換性のあるインターフェースを実装したクラスをエクスポートする必要があります。

警告

カスタムランタイムの作成は高度なユースケースです。ほとんどのユーザーはランタイムをカスタマイズする必要はありません。代わりにカスタムトランスフォーマーテスト環境モジュールモックで要件を満たせないか検討してください。

例:

custom-runtime.js
const {default: Runtime} = require('jest-runtime');

class CustomRuntime extends Runtime {
//...custom logic
}

module.exports = CustomRuntime;
custom-runtime.ts
import Runtime from 'jest-runtime';

export default class CustomRuntime extends Runtime {
//...custom logic
}

カスタムランタイムをJest設定に追加するには:

jest.config.js
module.exports = {
runtime: './custom-runtime.js',
};

runner [string]

デフォルト: "jest-runner"

このオプションでは Jest のデフォルトテストランナーの代わりにカスタムランナーを使用できます。代表的なランナーの例:

情報

runnerプロパティの値では、パッケージ名のjest-runner-プレフィックスを省略できます。

テストランナーを作成するには、コンストラクタでglobalConfigを受け取り、次のシグネチャを持つrunTestsメソッドを備えたクラスをエクスポートします:

async function runTests(
tests: Array<Test>,
watcher: TestWatcher,
onStart: OnTestStart,
onResult: OnTestSuccess,
onFailure: OnTestFailure,
options: TestRunnerOptions,
): Promise<void>;

テストランナーを並列実行ではなく直列でのみ実行するように制限する必要がある場合、クラスにはisSerialプロパティをtrueに設定する必要があります。

sandboxInjectedGlobals [array<string>]

ヒント

Jest 28ではextraGlobalsから名称が変更されました。

デフォルト: undefined

テストファイルはvm内で実行されるため、グローバルコンテキストのプロパティ(例: Math)への呼び出しが遅くなります。このオプションを使用すると、高速なルックアップのためにvm内で定義する追加のプロパティを指定できます。

たとえば、テストでMathを頻繁に呼び出す場合、sandboxInjectedGlobalsを設定することで渡すことができます。

/** @type {import('jest').Config} */
const config = {
sandboxInjectedGlobals: ['Math'],
};

module.exports = config;
メモ

このオプションは、ネイティブのESMを使用している場合には効果がありません。

setupFiles [array]

デフォルト: []

テスト環境を設定またはセットアップするためのコードを実行するモジュールへのパスのリストです。各setupFileはテストファイルごとに1回実行されます。各テストは独自の環境で実行されるため、これらのスクリプトはsetupFilesAfterEnvの実行前、およびテストコード自体の前にテスト環境内で実行されます。

ヒント

セットアップスクリプトがCJSモジュールの場合、非同期関数をエクスポートできます。Jestはその関数を呼び出し、結果を待機します。これは非同期でデータを取得する場合に便利です。ファイルがESMモジュールの場合は、トップレベルのawaitを使用して同じ結果を得られます。

setupFilesAfterEnv [array]

デフォルト: []

スイート内の各テストファイルが実行される前に、テストフレームワークを設定またはセットアップするコードを実行するモジュールへのパスのリストです。setupFilesはテストフレームワークが環境にインストールされる前に実行されるため、このスクリプトファイルを使用すると、テストフレームワークが環境にインストールされた直後、かつテストコード自体の前にコードを実行する機会が得られます。

言い換えると、setupFilesAfterEnvモジュールは各テストファイルで繰り返し使用されるコードを対象としています。テストフレームワークがインストールされていることで、Jestのグローバル変数jestオブジェクトexpectがモジュール内でアクセス可能になります。たとえば、jest-extendedライブラリから追加のマッチャーを追加したり、セットアップとティアダウンのフックを呼び出したりできます:

setup-jest.js
const matchers = require('jest-extended');
expect.extend(matchers);

afterEach(() => {
jest.useRealTimers();
});
/** @type {import('jest').Config} */
const config = {
setupFilesAfterEnv: ['<rootDir>/setup-jest.js'],
};

module.exports = config;

showSeed [boolean]

デフォルト: false

テストレポートのサマリーにシードを表示する--showSeedフラグと同等です。

slowTestThreshold [number]

デフォルト: 5

テストが遅いとみなされ、結果として報告されるまでの秒数です。

snapshotFormat [オブジェクト]

デフォルト: {escapeString: false, printBasicPrototype: false}

pretty-format readmeに記載されている特定のスナップショットフォーマットオプションを上書きできます(compareKeyspluginsを除く)。例えば以下の設定では、スナップショットフォーマッタが「Object」や「Array」のプレフィックスを出力しなくなります:

/** @type {import('jest').Config} */
const config = {
snapshotFormat: {
printBasicPrototype: false,
},
};

module.exports = config;
some.test.js
test('does not show prototypes for object and array inline', () => {
const object = {
array: [{hello: 'Danger'}],
};
expect(object).toMatchInlineSnapshot(`
{
"array": [
{
"hello": "Danger",
},
],
}
`);
});

snapshotResolver [文字列]

デフォルト: undefined

テストとスナップショットのパスを解決するモジュールへのパス。この設定オプションにより、Jestがスナップショットファイルを保存する場所をカスタマイズできます。

custom-resolver.js
module.exports = {
// resolves from test to snapshot path
resolveSnapshotPath: (testPath, snapshotExtension) =>
testPath.replace('__tests__', '__snapshots__') + snapshotExtension,

// resolves from snapshot to test path
resolveTestPath: (snapshotFilePath, snapshotExtension) =>
snapshotFilePath
.replace('__snapshots__', '__tests__')
.slice(0, -snapshotExtension.length),

// Example test path, used for preflight consistency check of the implementation above
testPathForConsistencyCheck: 'some/__tests__/example.test.js',
};

snapshotSerializers [配列<文字列>]

デフォルト: []

スナップショットテストで使用するシリアライザモジュールのパスリスト。

Jestは組み込みJavaScript型、HTML要素(Jest 20.0.0以降)、ImmutableJS(Jest 20.0.0以降)、React要素用のデフォルトシリアライザを提供しています。詳細はスナップショットテストチュートリアルをご覧ください。

custom-serializer.js
module.exports = {
serialize(val, config, indentation, depth, refs, printer) {
return `Pretty foo: ${printer(val.foo, config, indentation, depth, refs)}`;
},

test(val) {
return val && Object.prototype.hasOwnProperty.call(val, 'foo');
},
};

printerは既存プラグインを使用して値をシリアライズする関数です。

Jest設定にcustom-serializerを追加します:

/** @type {import('jest').Config} */
const config = {
snapshotSerializers: ['path/to/custom-serializer.js'],
};

module.exports = config;

最終的にテストは以下のようになります:

test(() => {
const bar = {
foo: {
x: 1,
y: 2,
},
};

expect(bar).toMatchSnapshot();
});

レンダリングされたスナップショット:

Pretty foo: Object {
"x": 1,
"y": 2,
}
ヒント

依存関係を暗黙的ではなく明示的にするには、個々のテストファイルでexpect.addSnapshotSerializerを呼び出してモジュールを追加できます(Jest設定のsnapshotSerializersにパスを追加する代わりに)。

シリアライザAPIの詳細はこちらで確認できます。

testEnvironment [文字列]

デフォルト: "node"

テストに使用されるテスト環境。Jestのデフォルト環境はNode.js環境です。Webアプリを構築している場合は、jsdomを通じてブラウザライクな環境を使用できます。

ファイル先頭に@jest-environmentドックブロックを追加することで、そのファイル内の全テストに別の環境を指定できます:

/**
* @jest-environment jsdom
*/

test('use jsdom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});

テスト環境設定用の独自モジュールを作成できます。このモジュールはsetupteardowngetVmContextメソッドを持つクラスをエクスポートする必要があります。このモジュールから変数をthis.globalオブジェクトに割り当てることでテストスイートに渡せます。これによりテストスイート内でグローバル変数として利用可能になります。コンストラクタには第一引数としてglobalConfigprojectConfig、第二引数としてtestEnvironmentContextが渡されます。

クラスはオプションで非同期の handleTestEvent メソッドを公開でき、jest-circus が発行するイベントにバインドします。通常jest-circusテストランナーは、handleTestEvent から返されるプロミスが解決されるまで一時停止しますが、次のイベントは例外です: start_describe_definition, finish_describe_definition, add_hook, add_test, error(最新のリストはtypes定義のSyncEvent型を参照)。これは後方互換性の理由とprocess.on('unhandledRejection', callback)のシグネチャによるもので、ほとんどのユースケースでは問題になりません。

テストファイル内のドックブロックプラグマは環境コンストラクタに渡され、テストごとの設定に使用できます。プラグマに値がない場合、オブジェクト内では空文字列として扱われます。プラグマが存在しない場合、オブジェクトには含まれません。

このクラスをカスタム環境として使用するには、プロジェクト内のフルパスで参照してください。たとえばクラスがプロジェクトのサブフォルダ内のmy-custom-environment.jsにある場合、アノテーションは次のようになります:

/**
* @jest-environment ./src/test/my-custom-environment
*/
情報

TestEnvironmentはサンドボックス化されています。各テストスイートは独自のTestEnvironmentでsetup/teardownをトリガーします。

例:

// my-custom-environment
const NodeEnvironment = require('jest-environment-node').TestEnvironment;

class CustomEnvironment extends NodeEnvironment {
constructor(config, context) {
super(config, context);
console.log(config.globalConfig);
console.log(config.projectConfig);
this.testPath = context.testPath;
this.docblockPragmas = context.docblockPragmas;
}

async setup() {
await super.setup();
await someSetupTasks(this.testPath);
this.global.someGlobalObject = createGlobalObject();

// Will trigger if docblock contains @my-custom-pragma my-pragma-value
if (this.docblockPragmas['my-custom-pragma'] === 'my-pragma-value') {
// ...
}
}

async teardown() {
this.global.someGlobalObject = destroyGlobalObject();
await someTeardownTasks();
await super.teardown();
}

getVmContext() {
return super.getVmContext();
}

async handleTestEvent(event, state) {
if (event.name === 'test_start') {
// ...
}
}
}

module.exports = CustomEnvironment;
// my-test-suite
/**
* @jest-environment ./my-custom-environment
*/
let someGlobalObject;

beforeAll(() => {
someGlobalObject = globalThis.someGlobalObject;
});

testEnvironmentOptions [Object]

デフォルト: {}

testEnvironmentに渡されるテスト環境オプションです。関連するオプションは環境によって異なります。

例えばjsdomに渡すオプションを上書きできます:

/** @type {import('jest').Config} */
const config = {
testEnvironment: 'jsdom',
testEnvironmentOptions: {
html: '<html lang="zh-cmn-Hant"></html>',
url: 'https://jestjs.io/',
userAgent: 'Agent/007',
},
};

module.exports = config;

jest-environment-jsdomjest-environment-nodeの両方でcustomExportConditionsを指定でき、package.jsonexportsから読み込むライブラリバージョンを制御できます。jest-environment-jsdomのデフォルトは['browser']jest-environment-nodeのデフォルトは['node', 'node-addons']です。

/** @type {import('jest').Config} */
const config = {
testEnvironment: 'jsdom',
testEnvironmentOptions: {
customExportConditions: ['react-native'],
},
};

module.exports = config;

これらのオプションはtestEnvironmentと同様にドックブロックで渡せます。オプション文字列はJSON.parseで解析可能である必要があります:

/**
* @jest-environment jsdom
* @jest-environment-options {"url": "https://jestjs.io/"}
*/

test('use jsdom and set the URL in this test file', () => {
expect(window.location.href).toBe('https://jestjs.io/');
});

testFailureExitCode [number]

デフォルト: 1

テスト失敗時にJestが返す終了コードです。

情報

Jestエラー時(例:無効な設定)の終了コードは変更されません。

testMatch [array<string>]

(デフォルト: [ "**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)" ])

Jestがテストファイルを検出するグロブパターンです。デフォルトでは__tests__フォルダ内の.js, .jsx, .ts, .tsxファイル、および.test/.specサフィックス付きファイル(例: Component.test.js または Component.spec.js)、さらにtest.js/spec.jsという名前のファイルを検索します。

指定可能なパターンの詳細はmicromatchパッケージを参照してください。

testRegex [string | array<string>]も参照してください(両オプションの併用は不可)。

ヒント

グロブパターンは設定での指定順に適用されます。例: ["!**/__fixtures__/**", "**/__tests__/**/*.js"]では否定パターンが2番目のパターンで上書きされるため__fixtures__を除外しません。否定を有効にするには**/__tests__/**/*.jsより後に配置してください。

testPathIgnorePatterns [配列<文字列>]

デフォルト: ["/node_modules/"]

テスト実行前に全てのテストパスに対して照合される正規表現パターンの配列です。テストパスがパターンに一致した場合、そのテストはスキップされます。

これらのパターン文字列はフルパスに対して照合されます。異なる環境でルートディレクトリが変わる可能性がある場合に誤ってファイルを無視しないよう、プロジェクトルートへのパスを含めるには <rootDir> 文字列トークンを使用してください。例: ["<rootDir>/build/", "<rootDir>/node_modules/"].

testRegex [文字列 | 配列<文字列>]

デフォルト: (/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$

Jestがテストファイルを検出するためのパターンまたはパターン群です。デフォルトでは __tests__ フォルダ内の .js, .jsx, .ts, .tsx ファイルや、.test または .spec サフィックス付きファイル(例: Component.test.jsComponent.spec.js)、test.js または spec.js という名前のファイルを検索します。testMatch [配列<文字列>] も参照してください。ただし両オプションは同時に指定できません。

デフォルト正規表現の可視化例:

├── __tests__
│ └── component.spec.js # test
│ └── anything # test
├── package.json # not test
├── foo.test.js # test
├── bar.spec.jsx # test
└── component.js # not test
情報

testRegex絶対ファイルパス を使用してテストファイルを検出するため、このパターンに一致する名前のフォルダがあると、その中の全ファイルがテストとして実行されます。

testResultsProcessor [文字列]

デフォルト: undefined

このオプションではカスタム結果プロセッサを使用できます。プロセッサは以下の構造のオブジェクトを第一引数として受け取り、加工後に返却する関数をエクスポートするNodeモジュールである必要があります:

{
"success": boolean,
"startTime": epoch,
"numTotalTestSuites": number,
"numPassedTestSuites": number,
"numFailedTestSuites": number,
"numRuntimeErrorTestSuites": number,
"numTotalTests": number,
"numPassedTests": number,
"numFailedTests": number,
"numPendingTests": number,
"numTodoTests": number,
"openHandles": Array<Error>,
"testResults": [{
"numFailingTests": number,
"numPassingTests": number,
"numPendingTests": number,
"testResults": [{
"title": string (message in it block),
"status": "failed" | "pending" | "passed",
"ancestorTitles": [string (message in describe blocks)],
"failureMessages": [string],
"numPassingAsserts": number,
"location": {
"column": number,
"line": number
},
"duration": number | null
},
...
],
"perfStats": {
"start": epoch,
"end": epoch
},
"testFilePath": absolute path to test file,
"coverage": {}
},
"testExecError:" (exists if there was a top-level failure) {
"message": string
"stack": string
}
...
]
}

testResultsProcessorreporters は非常に類似しています。主な違いは、テスト結果プロセッサが全テスト終了後にのみ呼び出される点です。一方レポーターは個々のテストやテストスイート終了時点で結果を受け取ることが可能です。

testRunner [文字列]

デフォルト: jest-circus/runner

このオプションでカスタムテストランナーを使用できます。デフォルトは jest-circus です。テストランナーの実装パスを指定することでカスタムランナーを提供可能です。

テストランナーモジュールは以下のシグネチャを持つ関数をエクスポートする必要があります:

function testRunner(
globalConfig: GlobalConfig,
config: ProjectConfig,
environment: Environment,
runtime: Runtime,
testPath: string,
): Promise<TestResult>;

実装例はデフォルトの jasmine2テストランナーパッケージ で参照できます。

testSequencer [文字列]

デフォルト: @jest/test-sequencer

このオプションでJestのデフォルトシーケンサーではなくカスタムシーケンサーを使用できます。

ヒント

sortshard はオプションで Promise を返却可能です。

例: テストパスをアルファベット順にソートするシーケンサー:

custom-sequencer.js
const Sequencer = require('@jest/test-sequencer').default;

class CustomSequencer extends Sequencer {
/**
* Select tests for shard requested via --shard=shardIndex/shardCount
* Sharding is applied before sorting
*/
shard(tests, {shardIndex, shardCount}) {
const shardSize = Math.ceil(tests.length / shardCount);
const shardStart = shardSize * (shardIndex - 1);
const shardEnd = shardSize * shardIndex;

return [...tests]
.sort((a, b) => (a.path > b.path ? 1 : -1))
.slice(shardStart, shardEnd);
}

/**
* Sort test to determine order of execution
* Sorting is applied after sharding
*/
sort(tests) {
// Test structure information
// https://github.com/jestjs/jest/blob/6b8b1404a1d9254e7d5d90a8934087a9c9899dab/packages/jest-runner/src/types.ts#L17-L21
const copyTests = [...tests];
return copyTests.sort((testA, testB) => (testA.path > testB.path ? 1 : -1));
}
}

module.exports = CustomSequencer;

Jest設定に custom-sequencer を追加:

/** @type {import('jest').Config} */
const config = {
testSequencer: 'path/to/custom-sequencer.js',
};

module.exports = config;

testTimeout [数値]

デフォルト: 5000

テストのデフォルトタイムアウト時間(ミリ秒単位)。

transform [オブジェクト<文字列, トランスフォーマーパス | [トランスフォーマーパス, オブジェクト]>]

デフォルト: {"\\.[jt]sx?$": "babel-jest"}

正規表現からトランスフォーマーへのパスマッピングです。オプションとして、設定オプションを含むタプルを第二引数として渡すことができます:{filePattern: ['path-to-transformer', {options}]}。例えば、非デフォルトの動作でbabel-jestを設定する方法は次の通りです:{'\\.js$': ['babel-jest', {rootMode: 'upward'}]}

JestはプロジェクトのコードをJavaScriptとして実行するため、Nodeがデフォルトでサポートしていない構文(JSX、TypeScript、Vueテンプレートなど)を使用する場合、トランスフォーマーが必要です。デフォルトではJestはbabel-jestトランスフォーマーを使用し、プロジェクトのBabel設定を読み込んで/\.[jt]sx?$/正規表現に一致するすべてのファイル(つまり、.js.jsx.ts.tsxファイル)を変換します。さらにbabel-jestは、ESモジュールのモックで説明されているモックの巻き上げに必要なBabelプラグインを注入します。

詳細や独自トランスフォーマーの構築手順については、コード変換セクションを参照してください。

ヒント

トランスフォーマーはファイルが変更されない限り、ファイルごとに1回しか実行されないことに注意してください。

追加のコードプリプロセッサと併用する場合、デフォルトのbabel-jestトランスフォーマーを明示的に含めることを忘れないでください:

/** @type {import('jest').Config} */
const config = {
transform: {
'\\.[jt]sx?$': 'babel-jest',
'\\.css$': 'some-css-transformer',
},
};

module.exports = config;

transformIgnorePatterns [配列<文字列>]

デフォルト:["/node_modules/", "\\.pnp\\.[^\\\/]+$"]

変換前にすべてのソースファイルパスに対してマッチングされる正規表現パターン文字列の配列。ファイルパスがいずれかのパターンに一致する場合、変換されません。

互いに重複する正規表現パターンを指定すると、変換されると期待していたファイルが変換されない可能性があります。例:

/** @type {import('jest').Config} */
const config = {
transformIgnorePatterns: ['/node_modules/(?!(foo|bar)/)', '/bar/'],
};

module.exports = config;

最初のパターンは/node_modules内のファイルをマッチング(つまり変換しない)しますが、/node_modules/foo//node_modules/bar/内のファイルは除外されます。2番目のパターンは/bar/を含むパス内のファイルをマッチング(つまり変換しない)します。これらを組み合わせると、最初のパターンで除外されていても2番目のパターンに一致するため、/node_modules/bar/内のファイルは変換されません。

サードパーティモジュールがトランスパイルされていない状態で公開されている場合があります(特にReact NativeやTypeScriptプロジェクトで)。node_modules内のファイルはデフォルトで変換されないため、Jestはこれらのモジュール内のコードを理解できず、構文エラーが発生します。この問題を解決するには、transformIgnorePatternsを使用してそのようなモジュールのトランスパイルを許可できます。この使用例の良いサンプルはReact Nativeガイドにあります。

これらのパターン文字列はフルパスに対してマッチングします。プロジェクトのルートディレクトリへのパスを含めるには<rootDir>文字列トークンを使用し、異なる環境でルートディレクトリが異なる場合に誤ってすべてのファイルを無視するのを防ぎます。

/** @type {import('jest').Config} */
const config = {
transformIgnorePatterns: [
'<rootDir>/bower_components/',
'<rootDir>/node_modules/',
],
};

module.exports = config;
ヒント

pnpmを使用していて、node_modules配下の一部パッケージを変換する必要がある場合、注意点があります。このフォルダ内のパッケージ(例: node_modules/package-a/)は.pnpm配下のパス(例: node_modules/.pnpm/package-a@x.x.x/node_modules/package-a/)にシンボリックリンクされているため、<rootDir>/node_modules/(?!(package-a|@scope/pkg-b)/)を直接使用しても認識されません。代わりに以下のいずれかの方法を使用してください:

/** @type {import('jest').Config} */
const config = {
transformIgnorePatterns: [
'<rootDir>/node_modules/.pnpm/(?!(package-a|@scope\\+pkg-b)@)',
/* if config file is under '~/packages/lib-a/' */
`${path.join(
__dirname,
'../..',
)}/node_modules/.pnpm/(?!(package-a|@scope\\+pkg-b)@)`,
/* or using relative pattern to match the second 'node_modules/' in 'node_modules/.pnpm/@scope+pkg-b@x.x.x/node_modules/@scope/pkg-b/' */
'node_modules/(?!.pnpm|package-a|@scope/pkg-b)',
],
};

module.exports = config;

.pnpm配下のフォルダ名はパッケージ名に@とバージョン番号が付与された形式であるため、/を使用すると認識されませんが、@を使用することで解決できます。

unmockedModulePathPatterns [array<string>]

デフォルト: []

モジュールローダーが自動的にモックを返す前に、すべてのモジュールに対してマッチする正規表現パターン文字列の配列。モジュールのパスがこのリスト内のいずれかのパターンにマッチする場合、モジュールローダーによる自動モック化が行われません。

これはアンダースコア(underscore)やローダッシュ(lodash)など、ほぼ常に実装詳細として使用される「ユーティリティ」モジュールに有効です。このリストは可能な限り小さく保ち、個々のテストでは明示的にjest.mock()/jest.unmock()を呼び出すことがベストプラクティスです。テストごとに明示的に設定することで、他のテスト読者がテスト環境を理解しやすくなります。

テストファイルの先頭で明示的にjest.mock()を呼び出すことで、個々のテストでこの設定を上書きできます。

verbose [boolean]

デフォルト: false(実行するテストファイルが1つのみの場合はtrue

実行中に個々のテストの結果を報告するかどうかを指定します。実行後にはすべてのエラーが下部に表示されます。

watchPathIgnorePatterns [array<string>]

デフォルト: []

ウォッチモードでテストを再実行する前に、すべてのソースファイルパスに対して照合される正規表現パターンの配列です。ファイルパスがこれらのパターンのいずれかに一致する場合、更新されてもテストの再実行はトリガーされません。

これらのパターンはフルパスに対して照合されます。異なる環境でルートディレクトリが異なる場合に誤ってすべてのファイルを無視しないよう、プロジェクトのルートディレクトリへのパスを含めるには <rootDir> 文字列トークンを使用します。例: ["<rootDir>/node_modules/"]

ここで何も指定しなくても、ウォッチャーはバージョン管理フォルダ(.git, .hg, .sl)の変更を無視します。他の隠しファイルやディレクトリ(ドット.で始まるもの)はデフォルトで監視対象となります。これらを watchPathIgnorePatterns に追加する際は、正規表現の特殊文字であるドットをエスケープすることを忘れないでください。

/** @type {import('jest').Config} */
const config = {
watchPathIgnorePatterns: ['<rootDir>/\\.tmp/', '<rootDir>/bar/'],
};

module.exports = config;

watchPlugins [配列<文字列 | [文字列, オブジェクト]>]

デフォルト: []

このオプションを使用するとカスタムウォッチプラグインを利用できます。詳細はウォッチプラグインを参照してください。

ウォッチプラグインの例:

情報

watchPlugins プロパティの値では、パッケージ名の jest-watch- プレフィックスを省略できます。

watchman [真偽値]

デフォルト: true

ファイルクローリングにwatchmanを使用するかどうか。

workerIdleMemoryLimit [数値|文字列]

デフォルト: undefined

ワーカーが再起動される前のメモリ制限を指定します。主にこの問題の回避策として機能します。

ワーカーがテストを実行した後、そのメモリ使用量がチェックされます。指定された値を超える場合、ワーカーは強制終了され再起動されます。制限値は複数の方法で指定でき、結果が何であれ Math.floor を使って整数値に変換されます:

  • 0 - テスト間で常にワーカーを再起動します。

  • <= 1 - システムメモリの割合として扱われます(例: 0.5 = システムメモリの50%)

  • \> 1 - 固定バイト値として扱われます(例: 1バイトを指定する場合は 1.1 を使用)

  • 単位付き:

    • 50% - システムメモリの割合
    • 100KB, 65MB など - 固定メモリ制限:
      • K/KB - キロバイト (x1000)
      • KiB - キビバイト (x1024)
      • M/MB - メガバイト
      • MiB - メビバイト
      • G/GB - ギガバイト
      • GiB - ギビバイト
注意

Linux CircleCIワーカーでは、システムメモリが正しく報告されないため、パーセンテージベースのメモリ制限は機能しません

/** @type {import('jest').Config} */
const config = {
workerIdleMemoryLimit: 0.2,
};

module.exports = config;

// [文字列]

このオプションは package.json 内にコメントを記述することを許可します。コメントテキストをこのキーの値として含めてください:

package.json
{
"name": "my-project",
"jest": {
"//": "Comment goes here",
"verbose": true
}
}

workerThreads

デフォルト: false

並列化に worker threads を使用するかどうかを指定します。デフォルトでは child processes が使用されます。

worker threads を使用するとパフォーマンスの向上に役立つ可能性があります。

注意

これは実験的な機能です。worker threads はメッセージのシリアライズに JSON.stringify() の代わりに structured clone を使用することに注意してください。これにより BigIntMapSet などの組み込み JavaScript オブジェクトは適切にシリアライズされますが、ErrorMapSet に設定された追加プロパティはシリアライズステップを経て渡されません。詳細はstructured cloneの記事をご覧ください。