tanaka's Programming Memo

プログラミングについてのメモ。

JestによるJavaScriptの単体テスト

JestはFacebookが公開しているJavaScript単体テストフレームワークです。テスト用フレームワークのJasmineを使いやすく拡張したもので、expect(value).toBe(other)の書式が使えます。

GitHubの方が最新情報が揃っているので、おかしいと思ったらGitHubを見るといいです。

Jestの特徴

  • テスト用フォルダーから自動的にテストスイート(テスト用の設定ファイル)を見つけて実行する
  • テストを実行するときに、自動的に依存関係をモックで解決する
  • 非同期のテストを同期的に実行する
  • jsdomを利用して、擬似的なDOMを実装してテストを実行する。そのため、コマンドラインでテストができる
  • テストを並列に実行できるのですぐにテストが終わる

Getting Started

公式サイトのトップページからざっくり和訳です。

以下のような「sum.js」ファイルをテストします。

// sum.js
function sum(value1, value2) {
  return value1 + value2;
}
module.exports = sum;

起動して実行するまでに7手順です。

  • 1. 適当なフォルダーを作り(~/git/jest-testなど)、その中に上記のsum.jsを生成する(追記)
  • 2. 上記のフォルダー内に__tests__というフォルダーを作成して、以下のようなsum-test.jsというファイルを作成する
// __tests__/sum-test.js
jest.dontMock('../sum');

describe('sum', function() {
  it('adds 1 + 2 to equal 3', function() {
    var sum = require('../sum');
    expect(sum(1, 2)).toBe(3);
  });
});
  • 3. ターミナルで以下のコマンドを実行して、npm用のpackage.jsonj村を作成する
    • 公開しないのであれば、質問は全てEnterで進めて、最後に「y」で良い
  • 4. ターミナルで以下を実行して、Jestのコマンドラインインターフェース(jest-cli)をインストールする
npm instll jest-cli --save-dev
    • JestはES2015の機能を使用するので、Node.jsのバージョンが4.0.0以上である必要がある。インストール中に警告が表示されたら、nodebrewなどを使ってNodeをバージョンアップする
  • 5. package.jsonを開いて、"scripts"の項目をjestでテストするために以下のように書き換えて上書き保存する
{
・・・
  "scripts": {
    "test": "jest"
  },
・・・
}
  • 6. npm test でテスト実行
  • 7. ファイルを監視して、更新があったら自動的にテストを動かすwatchを行う場合は以下のコマンド
npm test -- --watch
    • 上記だとコマンドの入力時に1度テストを実行する。起動時のテストを省略する場合は以下
npm test -- --watch=skip

この後・・・

以上で最低限の実行確認ができました。さらなる使い方や、ReactでのテストなどはJest | Painless JavaScript Unit Testing