Jest
概要
そのため、フロントエンドのコードをテストする際には
jsdom というライブラリを用いる
jsdom を用いると、Node.js 上で(ほとんどの)ブラウザ API をシミュレートできる
インストール
sh$ npm install --save-dev jest
--save-dev
: 開発専用の依存関係( devDependencies
)としてインストールするためのフラグ
sh$ npm install --save-dev jest @types/jest ts-jest
jest.config.js
の作成も必要
jest.config.jsmodule.exports = {
preset: "ts-jest",
testEnvironment: "node",
};
実行
ただし、通常 package.json
の scripts
に追加し、 npm
コマンド から実行する
package.json{
// ...
"scripts": {
"test": "jest"
},
// ...
}
ウォッチモード
--watchAll
を付けて実行すると、テストファイルやテスト対象ファイルに変更があると、自動的にすべてのテストを再実行する
--coverage
を付けて実行すると、コードカバレッジを計算する
sh$ npx jest --coverage
PASS ./index.test.js
fizzBuzz()
✓ returns "FizzBuzz" for multiples of 3 and 5 (1 ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 75 | 50 | 100 | 66.66 |
index.js | 75 | 50 | 100 | 66.66 | 4
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.23 s, estimated 1 s
Ran all test suites.
サンプルコード
greeting.test.jsconst greeting = (guest) => `Hello, ${guest}!`;
describe("greeting", () => {
it("says hello", () => {
expect(greeting("Jest")).toBe("Hello, Jest!");
});
});
メソッド
テストのグルーピングを行い、第 1 引数にテストスイート名前、第 2 引数に 1 つ以上のテストを含む関数を受け取る
個別のテストを宣言する
第 1 引数にテスト名、第 2 引数に実際のテストコードを含む関数を受け取る
アサーションを作成する
テスト対象の値を受け取り、マッチャをメソッドとして持つオブジェクトを返す
厳密な
等価性 チェック(
===
)を行うマッチャ
オブジェクトの深い等価性をチェックするマッチャ
慣習的にテストスイート名には名詞、テスト名には動詞の文字列を渡す
これにより、テストがカバーしている機能を説明する完全な文章( greeting() says hello"
)が出来上がる