Jestで基本的に使用するMatcher
はじめに
Jestのドキュメントを読んでまとめていきます。
ところどころ気になった部分を調べて補足したり解釈を入れています。
https://jestjs.io/ja/docs/using-matchers
Jestのマッチャー
Jestではマッチャーを使用して、ある値が特定の条件を満たしているかどうかをチェックすることができます。
いくつかの一般的なマッチャーを紹介します。
toBe - 等価性をチェックする
厳密な等価性をチェックします。
test('2 + 2 is 4', () => { expect(2 + 2).toBe(4); });
expect(2 + 2)
は "expectation" オブジェクトを返します。
.toBe(4)
はマッチャーです。
Jestが実行されると、失敗したマッチャーをすべて追跡し、エラーメッセージを表示します。
toBe
は Object.is
を使用して厳密な等価性をテストします。
toEqual - オブジェクトや配列の等価性をチェックする
オブジェクトまたは配列のすべてのフィールドを再帰的にチェックします。
test('object assignment', () => { const data = {one: 1}; data['two'] = 2; expect(data).toEqual({one: 1, two: 2}); });
toBeUndefined - undefinedであるかチェック
toBeUndefined
は値がundefined
であることをチェックします。
test('undefined value', () => { let value; expect(value).toBeUndefined(); });
toBeNull - nullであるかチェック
toBeNull
は値がnull
であることをチェックします。
test('null value', () => { let value = null; expect(value).toBeNull(); });
toBeFalsy - falsyな値であるかチェック
toBeFalsy
は値が偽と評価される(false
、0
、''
(空文字)、NaN
、null
、undefined
)ことをチェックします。
test('falsy value', () => { let value = 0; expect(value).toBeFalsy(); });
数値の比較を行うマッチャー
数値の比較するのに、対応するマッチャーをまとめて紹介しています。
test('two plus two', () => { const value = 2 + 2; // 2 + 2 の結果が3より大きいことを確認 expect(value).toBeGreaterThan(3); // 2 + 2 の結果が3.5以上であることを確認 expect(value).toBeGreaterThanOrEqual(3.5); // 2 + 2 の結果が5より小さいことを確認 expect(value).toBeLessThan(5); // 2 + 2 の結果が4.5以下であることを確認 expect(value).toBeLessThanOrEqual(4.5); // 2 + 2 の結果が厳密に4であることを確認 (toBeは厳密な等価性を確認) expect(value).toBe(4); // 2 + 2 の結果が値として4であることを確認 (toEqualは値の等価性を確認) expect(value).toEqual(4); });
文字列を確認するマッチャー
Jestは、文字列のマッチングを行うためのマッチャーも提供しています。
正規表現を使用して、特定のパターンが文字列内に存在するかを確認するのに役立ちます。
// 'I'が'team'に含まれていないことを確認するテスト test('there is no I in team', () => { // toMatchマッチャーを使用して、'team'が/I/正規表現にマッチしないことを確認 expect('team').not.toMatch(/I/); }); // 'stop'が'Christoph'に含まれていることを確認するテスト test('but there is a "stop" in Christoph', () => { // toMatchマッチャーを使用して、'Christoph'が/stop/正規表現にマッチすることを確認 expect('Christoph').toMatch(/stop/); });
配列や反復可能なオブジェクトの確認を行うマッチャー
Jestでは、配列や反復可能なオブジェクトに特定の要素が含まれているかを確認するためのマッチャー toContain
を提供しています。
特定の要素の存在を簡単にチェックできます。
// ショッピングリスト onst shoppingList = [ 'diapers', 'kleenex', 'trash bags', 'paper towels', 'milk', ]; // 'milk'がショッピングリストに含まれていることを確認するテスト test('the shopping list has milk on it', () => { // toContainマッチャーを使用して、'shoppingList'に'milk'が含まれていることを確認 expect(shoppingList).toContain('milk'); // Setオブジェクトに対しても同様にtoContainマッチャーを使用できます。 expect(new Set(shoppingList)).toContain('milk'); });
toContain
マッチャーを使用すれば、配列や反復可能なオブジェクトに対して特定の要素が存在するかを簡単に検証することができます。
例外の確認を行うマッチャー
Jestでは、関数が呼び出し時に例外を投げるかどうかをテストするためのマッチャー toThrow
を提供しています。
例外の発生を簡単にチェックできます。
// 例外を投げる関数 function compileAndroidCode() { throw new Error('you are using the wrong JDK!'); } // 例外が投げられることを確認するテスト test('compiling android goes as expected', () => { // toThrowマッチャーを使用して、compileAndroidCode関数が例外を投げることを確認 expect(() => compileAndroidCode()).toThrow(); // Errorオブジェクトが投げられることも確認可能 expect(() => compileAndroidCode()).toThrow(Error); // さらに、エラーメッセージの文字列もしくは正規表現にマッチするか確認できる expect(() => compileAndroidCode()).toThrow('you are using the wrong JDK'); expect(() => compileAndroidCode()).toThrow(/JDK/); // エラーメッセージが厳密に一致するかどうかもテストできる(正規表現を使用) expect(() => compileAndroidCode()).toThrow(/^you are using the wrong JDK$/); // テスト失敗 expect(() => compileAndroidCode()).toThrow(/^you are using the wrong JDK!$/); // テスト成功 });
続く…
コメント
本記事の内容は以上になります!
プログラミングスクールのご紹介 (卒業生より)
お世話になったプログラミングスクールであるRUNTEQです♪
こちらのリンクを経由すると1万円引きになります。
RUNTEQを通じて開発学習の末、受託開発企業をご紹介いただき、現在も双方とご縁があります。
もし、興味がありましたらお気軽にコメントか、TwitterのDMでお声掛けください。