Mochaを使ったNode.jsでの単体テスト入門の入門
用語
Mocha(モカ)
JavaScriptのテスティングフレームワーク。
Chai
JavaScriptテスティングフレームワークのアサーションライブラリ。
テスティングフレームワークと一緒に使う。
記述スタイルをshould,expect,assert文から選べる。
TDD
テスト駆動開発 (てすとくどうかいはつ、test-driven development; TDD)
プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる、という短い工程を繰り返すスタイルである。多くのアジャイルソフトウェア開発手法、例えばエクストリーム・プログラミングにおいて強く推奨されている。近年はビヘイビア駆動開発へと発展を遂げている。
BDD
ビヘイビア駆動開発 (振舞駆動開発; behavior driven development; BDD)
プログラム開発手法の一種で、テスト駆動開発から派生した物である。
テスト駆動開発で記述されるテストケースは、作成したプログラムの動作が正しいかどうかを検証するために行う「テスト」である。テストであるという点は同一であるが、加えて、これから作成しようとするプログラムに期待される「振る舞い」や「制約条件」、つまり「要求仕様」に近い形で、自然言語を併記しながらテストコードを記述する。テストフレームワークのメソッド名も自然言語(英語など)に近い形をとっている。
スタイル
-
TDDスタイル
-
Node.js標準のassert文がメインのスタイル
assert
assert.equal(foo, 'bar');
-
-
BDDスタイル
- Should文を使用したスタイル
The should interface extends Object.prototype to provide a single getter as the starting point for your language assertions. It works on node.js and in all modern browsers except Internet Explorer.
Node及びIE以外のモダンブラウザで動く。
shouldfoo.should.be.a('string');
- Expect文を使用したスタイル
The expect interface provides a function as a starting point for chaining your language assertions. It works on node.js and in all browsers.
Node及びすべてのブラウザで動く☆
expectexpect(foo).to.be.a('string');
さわってみる
assertスタイル
$ npm install mocha --save-dev
$ npm install chai --save-dev
$ mkdir test
$ ls
node_modules package.json test
$ cat <<_EOF> test/test.js
var assert = require('assert');
describe('Array', function() {
describe('#indexOf()', function () {
it('should return -1 when the value is not present', function () {
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
});
});
});
_EOF
$ mocha
Array
#indexOf()
? should return -1 when the value is not present
1 passing (8ms)
Shouldスタイル
var chai = require("chai");
chai.should();
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
[1,2,3].indexOf(5).should.equal(-1);
[1,2,3].indexOf(0).should.equal(-1);
});
});
});
Expectスタイル
var expect = require("chai").expect;
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
expect([1,2,3].indexOf(5)).to.equal(-1);
expect([1,2,3].indexOf(0)).to.equal(-1);
});
});
});
おわり
今回Node.jsのテストフレームワークとしてMochaを使用してみましたが、他にもJasmine2とかが有名のようです。