オフトゥン大好き。

惰眠系プログラマの作業ログで( ˘ω˘ ) スヤァ…

JavaScriptテスト環境セットアップ: Node.js編

Node.jsでテスト書くためのスタックとか設定を書く。
あくまで僕がいつも使ってるやつなので他にもっといいのあったら教えてください。

スタック

Node.jsのテストはだいたい次の4つのパッケージで完結してる。フロントのテストはもっとめんどくさい。

name description
mocha Node.jsのテストランナー
chai BDD/TDDスタイルでテストを書くためのライブラリ
sinon JavaScriptのモックライブラリ
sinon-chai chaiでsinonを使うためのchaiプラグイン
$ npm install mocha chai sinon sinon-chai -D

セットアップ

globalにテスト中に使う変数を入れておく

僕はいつもExpect形式で書くのだけど、そのままだとテストファイルの冒頭に以下のような設定を毎回書かないといけない。

const chai  = require('chai');
const sinon = require('sinon');
const sinonChai = require('sinon-chai');
chai.use(sinonChai);

それは面倒だし、メンテナンス性も悪いので別ファイルにまとめておいて、mocha起動時にそれを読み込ませる。例えば/test/globals.jsというファイルを作ってglobalにexpectを突っ込んでおく。

const chai  = require('chai');
const sinon = require('sinon');
const sinonChai = require('sinon-chai');

chai.use(sinonChai);
global.expect = chai.expect;



npm testを定義する

作成したglobal.jsをテスト前に読み込むにはpackage.jsonscripts:test項目に次のようにコマンドを割り当てておく。

"scripts": {
    "test:main": "$(npm bin)/mocha './test/**/*.spec.js' -r ./test/globals --recursive"
}

すると'./test/globals.js'がrequireされた状態でテストが開始するので書くファイルにexpectの宣言を書かずに使用できる。
こんな感じで。

const API = require('./api');

describe('create API client', () => {

    const client = new API();

    it('fetch user info successfully', done => {
        const user = client.getUserInfo();
        
        expect(user)
            .to.have.property('name')
            .that.is.a('string');

        done();
    });
});



Travis CI

追加でTravis CIの設定をして自動化する。
とはいってもここまでやるともう雑な.travis.ymlを用意するだけで良い。

language: node_js
node_js:
  - 6
  - 5
  - 4



次はフロント側のテストについて書く。

関連記事

npmプロジェクトを0からはじめるメモ - オフトゥン大好き