はじめに
お好みのパッケージマネージャーを使用して Jest をインストールする
- npm
- Yarn
- pnpm
npm install --save-dev jest
yarn add --dev jest
pnpm add --save-dev jest
2つの数値を加算する架空の関数のテストを作成してみましょう。まず、sum.js
ファイルを作成します。
function sum(a, b) {
return a + b;
}
module.exports = sum;
次に、sum.test.js
というファイルを作成します。これには実際のテストが含まれます。
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
以下のセクションをpackage.json
に追加します。
{
"scripts": {
"test": "jest"
}
}
最後に、yarn test
またはnpm test
を実行すると、Jestはこのメッセージを出力します。
PASS ./sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)
Jestを使用して最初のテストを正常に作成しました!
このテストでは、2つの値が完全に同一であることをテストするために、expect
とtoBe
を使用しました。Jestがテストできるその他の詳細については、マッチャーの使用を参照してください。
コマンドラインからの実行
Jestは、CLIから直接実行できます(yarn global add jest
やnpm install jest --global
などで、グローバルにPATH
で使用可能な場合)。さまざまな便利なオプションがあります。
以下は、my-test
に一致するファイルに対して、config.json
を構成ファイルとして使用し、実行後にネイティブOS通知を表示してJestを実行する方法です。
jest my-test --notify --config=config.json
コマンドラインからjest
を実行する方法についてさらに詳しく知りたい場合は、Jest CLIオプションのページをご覧ください。
追加の構成
基本構成ファイルの生成
プロジェクトに基づいて、Jestはいくつかの質問を行い、各オプションの簡単な説明付きの基本構成ファイルを作成します。
- npm
- Yarn
- pnpm
npm init jest@latest
yarn create jest@latest
pnpm create jest@latest
Babelの使用
Babelを使用するには、必要な依存関係をインストールします。
- npm
- Yarn
- pnpm
npm install --save-dev babel-jest @babel/core @babel/preset-env
yarn add --dev babel-jest @babel/core @babel/preset-env
pnpm add --save-dev babel-jest @babel/core @babel/preset-env
プロジェクトのルートにbabel.config.js
ファイルを作成して、現在のNodeのバージョンをターゲットとするようにBabelを設定します。
module.exports = {
presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
};
Babelの理想的な構成は、プロジェクトによって異なります。詳細については、Babelのドキュメントを参照してください。
Babelの設定をJestに対応させる
Jestは、process.env.NODE_ENV
が他の値に設定されていない場合、'test'
に設定します。構成でこれを使用して、Jestに必要なコンパイルのみを条件付きで設定できます。例:
module.exports = api => {
const isTest = api.env('test');
// You can use isTest to determine what presets and plugins to use.
return {
// ...
};
};
babel-jest
は、Jestのインストール時に自動的にインストールされ、プロジェクトにbabel構成が存在する場合、ファイルを自動的に変換します。この動作を回避するには、transform
構成オプションを明示的にリセットできます。
module.exports = {
transform: {},
};
webpackの使用
Jestは、アセット、スタイル、コンパイルを管理するためにwebpackを使用するプロジェクトで使用できます。webpackは、他のツールよりもいくつかの特有の課題を提供します。開始するには、webpackガイドを参照してください。
Viteの使用
Jestは、ネイティブESMを介してソースコードを提供してフロントエンドツールを提供するviteを使用するプロジェクトで使用できます。viteは意見の強いツールであり、すぐに使えるいくつかのワークフローを提供します。Jestは、viteのプラグインシステムの動作方法により、viteによって完全にサポートされていませんが、vite-jest
を使用したファーストクラスのjest統合に関するいくつかの動作例があります。これは完全にサポートされていないため、vite-jest
の制限事項を読むこともできます。開始するには、viteガイドを参照してください。
Parcelの使用
Jestは、webpackと同様にアセット、スタイル、コンパイルを管理するためにparcel-bundlerを使用するプロジェクトで使用できます。Parcelは構成を必要としません。開始するには、公式のドキュメントを参照してください。
TypeScriptの使用
babel
経由
Jestは、Babel経由でTypeScriptをサポートしています。まず、上記のBabelの使用に関する指示に従っていることを確認してください。次に、@babel/preset-typescript
をインストールします。
- npm
- Yarn
- pnpm
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
次に、@babel/preset-typescript
をbabel.config.js
のプリセットのリストに追加します。
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
ただし、BabelでTypeScriptを使用することにはいくつかの注意点があります。BabelでのTypeScriptサポートは純粋にトランスパイルであるため、Jestはテストの実行時に型チェックを行いません。それが必要な場合は、代わりにts-jestを使用するか、TypeScriptコンパイラーtscを個別(またはビルドプロセスの一部として)実行できます。
ts-jest
経由
ts-jestは、Jestのソースマップサポート付きのTypeScriptプリプロセッサであり、Jestを使用してTypeScriptで記述されたプロジェクトをテストできます。
- npm
- Yarn
- pnpm
npm install --save-dev ts-jest
yarn add --dev ts-jest
pnpm add --save-dev ts-jest
Jestがts-jest
を使用してTypeScriptをトランスパイルするには、構成ファイルを作成する必要がある場合があります。
型定義
TypeScriptで記述されたテストファイルに対してJestグローバルAPIを型付けする方法は2つあります。
Jestに付属し、Jestを更新するたびに更新される型定義を使用できます。@jest/globals
パッケージをインストールします。
- npm
- Yarn
- pnpm
npm install --save-dev @jest/globals
yarn add --dev @jest/globals
pnpm add --save-dev @jest/globals
そして、そこからAPIをインポートします。
import {describe, expect, test} from '@jest/globals';
import {sum} from './sum';
describe('sum module', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
});
describe.each
/test.each
とモック関数
の追加の使用ドキュメントを参照してください。
または、@types/jest
パッケージをインストールすることもできます。これにより、インポートする必要なくJestグローバルの型が提供されます。
- npm
- Yarn
- pnpm
npm install --save-dev @types/jest
yarn add --dev @types/jest
pnpm add --save-dev @types/jest
@types/jest
は、DefinitelyTypedで管理されているサードパーティライブラリであるため、最新のJest機能やバージョンはまだカバーされていない可能性があります。Jestと@types/jest
のバージョンをできるだけ一致させようとします。たとえば、Jest 27.4.0
を使用している場合は、@types/jest
の27.4.x
をインストールするのが理想的です。
ESLintの使用
Jestは、テストファイルで使用する前に、@jest/globals
からJestグローバルヘルパー(describe
、it
など)をインポートする限り、さらに構成しなくてもESLintで使用できます。これは、ESLintがJestグローバルについて認識していないため、ESLintからのno-undef
エラーを回避するために必要です。
これらのインポートを回避する場合は、ESLint環境を構成して、jest
環境を追加することでこれらのグローバルをサポートできます。
{
"overrides": [
{
"files": ["tests/**/*"],
"env": {
"jest": true
}
}
]
}
または、同様の効果のあるeslint-plugin-jest
を使用します。
{
"overrides": [
{
"files": ["tests/**/*"],
"plugins": ["jest"],
"env": {
"jest/globals": true
}
}
]
}