■ はじめに
https://dk521123.hatenablog.com/entry/2020/12/23/103209
の続き。 Jest を書いていて気になったTips的なものをメモする。
目次
【1】確認用メソッド 【2】その他メソッド 1)each
【1】確認用メソッド
expectクラスの以下の一覧でどういったものがあるかが分かる。
公式サイト
https://jestjs.io/docs/ja/expect
ってゆーかー、ざっとでよければ、以下のサイトがめちゃ分かりやすい。
https://qiita.com/t-toyota/items/93cce73004b9f765cfcf
主なメソッド
1).toBe() ... 等しいかどうか 2).not ... 等しくない(e.g. expect(A).not.toBe(B);) 3).toBeNull() ... null かどうか 4).toBeTruthy() / .toBeFalsy() ... true/falseかどうか 5).toContain() ... 対象の期待の結果が含まれているかどうか 6).toThrow() / .toThrowError() ... 例外が発生したか
【2】その他メソッド
1)each
引数に従って結果を切り替えるメソッドをテストする際に便利! 以下、サンプル。
使用上の注意
* 許容できる引数は3つまで。(4つ以上だとエラーになった) ~~~~~~ it.each([ ['Hi', 'Mike', 'Hi, Mike!!'], // OK ['Hi', 'Mike', '!!!' 'Hi, Mike!!'], // ERROR
ファイル構成
my-app << 対象プロジェクト + src | + util | + Hello.ts << テスト対象TypeScriptファイル + tests/unit + util + Hello.spec.ts << 単体テストファイル
Hello.ts
export default class Hello { static getHello(name: string): string { let message = 'Hello, World!' switch (name) { case "Mike": case "Tom": message = `Hi, ${name}!!`; break; default: // Go through break; } return message; } }
Hello.spec.ts
import Hello from '../../../src/util/Hello'; describe("Hello tests", () => { describe("getHello() test", () => { it.each([ ['Mike', 'Hi, Mike!!'], ['Tom', 'Hi, Tom!!'], ['Sam', 'Hello World!'], ])('name = %s, expected = %s', async (inputName: string, expected: string) => { const actual = Hello.getHello(inputName); expect(actual).toBe(expected); }); }); });
補足:it.each() でエラーが発生した場合
環境によって、以下の「エラー内容」が発生する場合がある。 ・発生したJestのバージョン:"@types/jest": "^24.0.19" ・発生しなかったJestのバージョン:"@types/jest": "^26.0.19" 【エラー内容】 Property 'each' does not exist on type 'TestFunction'.ts(2339) 【対応案】 (もっといい対応があると思うが)jest-each をインストールする ~~~~~~ npm i --save-dev jest-each ~~~~~~
https://www.npmjs.com/package/jest-each
修正版:Hello.spec.ts
import Hello from '../../../src/util/Hello'; import each from 'jest-each'; describe("Hello tests", () => { describe("getHello() test", () => { each([ ['Mike', 'Hi, Mike!!'], ['Tom', 'Hi, Tom!!'], ['Sam', 'Hello, World!'], ]).test('name = %s, expected = %s', (inputName: string, expected: string) => { const actual = Hello.getHello(inputName); expect(actual).toBe(expected); }); }); });
関連記事
JS単体試験ツール Jest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/23/103209
JS単体試験ツール Jest ~ Mock編 ~
https://dk521123.hatenablog.com/entry/2021/01/26/215558
JS単体試験ツール Jest ~ キャッシュ関連 ~
https://dk521123.hatenablog.com/entry/2021/03/12/164932