TL;DR
Meta(旧 Facebook)が開発した、JavaScript のテスティングフレームワーク。Node.js 上で動く。
仕組み
Node.js 上で動くので、フロントエンドのコードをテストするときは jsdom を使う。jsdom を使うと、Node.js 上でブラウザの API のほとんどをシミュレートできる。
インストール
JavaScript では次のようにインストールする。--save-dev は、開発専用の依存関係(devDependencies)として入れるためのフラグである。
$ npm install --save-dev jestTypeScript では @types/jest と ts-jest も入れ、jest.config.js を作る。
$ npm install --save-dev jest @types/jest ts-jestmodule.exports = {
preset: "ts-jest",
testEnvironment: "node",
}実行
npx jest で実行できるが、ふつうは package.json の scripts に追加して npm test で実行する。
{
"scripts": {
"test": "jest"
}
}--watchAll を付けると、ファイルが変わるたびにすべてのテストを再実行する。--coverage を付けると、コードカバレッジを計算する。
例
const greeting = (guest) => `Hello, ${guest}!`
describe("greeting", () => {
it("says hello", () => {
expect(greeting("Jest")).toBe("Hello, Jest!")
})
})describe: テストスイートを宣言する。第 1 引数にテストスイートの名前、第 2 引数に 1 つ以上のテストを含む関数を渡すit: 個別のテストを宣言する。第 1 引数にテストの名前、第 2 引数にテストのコードを含む関数を渡すexpect: アサーションを作る。テストする値を受け取り、マッチャをメソッドとして持つオブジェクトを返すtoBe:===で厳密に等しいかを確かめるマッチャtoEqual: オブジェクトが深く等しいかを確かめるマッチャ
注意点
慣習として、テストスイートの名前には名詞、テストの名前には動詞を渡す。こうすると、テストが確かめる機能を説明する文(greeting says hello)ができあがる。
自分の理解
Spec 系のテストでも、だいたいこの書き方をする。