Jest
https://scrapbox.io/files/66d1b6554815ab001cbd1d2a.png
概要
そのため、フロントエンドのコードをテストする際には jsdom というライブラリを用いる jsdom を用いると、Node.js 上で(ほとんどの)ブラウザ API をシミュレートできる
インストール
code:sh
$ npm install --save-dev jest
--save-dev: 開発専用の依存関係(devDependencies)としてインストールするためのフラグ
code:sh
$ npm install --save-dev jest @types/jest ts-jest
jest.config.js の作成も必要
code:jest.config.js
module.exports = {
preset: "ts-jest",
testEnvironment: "node",
};
実行
code:sh
$ npx jest
ただし、通常 package.json の scripts に追加し、npm コマンド から実行する
code:package.json
{
// ...
"scripts": {
"test": "jest"
},
// ...
}
code:sh
$ npm test
ウォッチモード
--watchAll を付けて実行すると、テストファイルやテスト対象ファイルに変更があると、自動的にすべてのテストを再実行する
code:sh
$ npx jest --watchAll
--coverage を付けて実行すると、コードカバレッジを計算する
code: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.
サンプルコード
code:greeting.test.js
const greeting = (guest) => Hello, ${guest}!;
describe("greeting", () => {
it("says hello", () => {
expect(greeting("Jest")).toBe("Hello, Jest!");
});
});
メソッド
テストのグルーピングを行い、第 1 引数にテストスイート名前、第 2 引数に 1 つ以上のテストを含む関数を受け取る
個別のテストを宣言する
第 1 引数にテスト名、第 2 引数に実際のテストコードを含む関数を受け取る
アサーションを作成する
テスト対象の値を受け取り、マッチャをメソッドとして持つオブジェクトを返す
オブジェクトの深い等価性をチェックするマッチャ
慣習的にテストスイート名には名詞、テスト名には動詞の文字列を渡す
これにより、テストがカバーしている機能を説明する完全な文章(greeting() says hello")が出来上がる
Spec ではだいたいこれ radish-miyazaki.icon