Jestとは何か
JestはFacebook(現Meta)が開発したJavaScript向けのテストフレームワークです。主にReactアプリケーションのテストで利用されますが、Node.jsやVue、Angularなど幅広い環境でも使用できます。
主な特徴
- Zero configuration:設定ファイルなしで即座にテストを実行できます。
- スナップショットテスト:UIコンポーネントの出力を保存し、変更があった場合に検知できます。
- モック機能:関数やモジュールを簡単にモックできます。
- 高速なテスト実行:テストの並列実行やキャッシュ機構により高速に動作します。
インストールと基本的な使い方
プロジェクトにJestを導入するにはnpmまたはyarnを使用します。
npm install --save-dev jest
# または
yarn add --dev jest
インストール後、package.jsonにテストスクリプトを追加します。
{
\"scripts\": {
\"test\": \"jest\"
}
}
テストファイルは通常*.test.jsまたは*.spec.jsという名前で作成し、__tests__ディレクトリに置きます。
簡単なテスト例
以下は関数sumのテスト例です。
// 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);
});コマンドnpm testを実行すると、Jestが自動的にテストを検出し、結果を表示します。
$ npm test
> jest-demo@1.0.0 test
> jest
PASS ./sum.test.js
✓ adds 1 + 2 to equal 3 (3 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.384 s
Ran all test suites.スナップショットテストの例
Reactコンポーネントの出力をスナップショットとして保存し、将来的な変更を検出できます。
// Button.js
import React from 'react';
export default function Button({ label }) {
return <button>{label}</button>;
}// Button.test.js
import React from 'react';
import renderer from 'react-test-renderer';
import Button from './Button';
test('Button renders correctly', () => {
const tree = renderer
.create(<Button label="Click me" />)
.toJSON();
expect(tree).toMatchSnapshot();
});初回実行時にスナップショットが__snapshots__フォルダに保存され、以降の実行で差分があればテストが失敗します。
まとめ
Jestは設定が簡単で、モック・スナップショット・並列実行など豊富な機能を備えた強力なテストフレームワークです。JavaScript/TypeScriptのプロジェクトでテストを導入したい場合、まずはJestを試してみることをおすすめします。