📸
jest-image-snapshotをTypeScriptで使ってみる
はじめに
- この記事では、jest-image-snapshot + TypeScriptを使用したサンプルコードを紹介します。
対象読者
- Jestが書ける方
- Jestのスナップショットテストを知っている方
- Jestで画像比較を簡単に行いたい方
jest-image-snapshotとは
- Jestでテスト結果を比較する時に画像データについても比較出来るようにするライブラリです。
-
expect
にtoMatchImageSnapshot
が追加され、それを使用することによって画像データの比較を行います。
動作環境
- Node.js - 14.x
- Yarn - 1.22.x
- TypeScript - 4.5.x
- Jest - 27.5.x
- ts-jest - 27.1.x
- jest-image-snapshot - 4.5.x
- @types/jest-image-snapshot - 4.3.x
サンプルコード
設定ファイル
test/jest-setup.ts
// @types/jest-image-snapshotをインストールすることによりTypeScriptでもjest-image-snapshotを参照できます。
import { toMatchImageSnapshot } from 'jest-image-snapshot';
// Jestのsetup時にtoMatchImageSnapshotを使用できるようにします。
expect.extend({ toMatchImageSnapshot });
jest.config.js
module.exports = {
moduleFileExtensions: ['js', 'ts'],
transform: {
'^.+\\.ts$': 'ts-jest',
},
testMatch: ['<rootDir>/test/**/*.+(ts|js)'],
// 上記のtest/jest-setup.tsをsetupファイルとして設定します。
setupFilesAfterEnv: ['./test/jest-setup.ts'],
// jest-setup.tsをテスト対象外にします。
modulePathIgnorePatterns: ['jest-setup.ts'],
};
テストコード
test/sample.test.ts
describe('image test', () => {
it('test1.png ok', () => {
// test/test.pngを読み込む
const imagePath = path.join(process.cwd(), 'test/test.png');
const file = fs.readFileSync(imagePath);
// 読み込んだ画像データを比較
expect(file).toMatchImageSnapshot();
});
});
test/test.png
動作確認
1.初回実行
- テストを実行すると
test/__image_snapshots__/sample-test-ts-image-test-test-png-1-snap.png
にスナップショットファイルが作成されます。
2.画像を変更して実行
test/test.pngの内容変更
- 画像ファイルの内容を変更します。
実行結果
- テストが失敗します。
-
test/__image_snapshots__/__diff_output__/sample-test-ts-image-test-test-png-1-diff.png
にDIFF画像ファイルが作成されます。
DIFF画像
- スナップショット、DIFF画像、テスト画像の順に並べられて画像ファイルとして出力されます。
- DIFF画像では差分箇所が赤色で強調表示されます。
-
toMatchImageSnapshot
に設定するパラメータによって、何パーセント変更されたら失敗などの設定も可能です。
おわりに
- 簡単に画像のスナップショットテストが実装出来ました。
- 画像ファイルのリグレッションテストとして使用するのに便利です。
- e2eテストツールと連携するとテストの幅が広がりそうです。
ソースコード一式
関連記事
Discussion