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.jsonのscripts: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
次はフロント側のテストについて書く。