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