もうね、これ、結構かなりな本気モード突入しかけてて。
最後にコード貼り付けたときから機能的には大進化を続けてはいるんだけれど、「開発スタイル」は雑なまんまきてて、さすがにまともな単体テストフレームワークがないと、という段階。最初からそうしろや、てことではあるけれどさ、でもまぁ「個人の遊びの延長」なものを、最初っから unit test しかけるなんて、あまり考えない。
なので mocha。npm -g mocha
でのインストール、はいつも通り。
こんな test.js:
1 var assert = require('assert');
2 describe('Array', function() {
3 describe('#indexOf()', function() {
4 it('should return -1 when the value is not present', function() {
5 assert.equal([1,2,3].indexOf(4), -1);
6 });
7 });
8 });
を書けばいいのね、ふんふん。で…、手っ取り早くは「mocha」を起動するだけか:
1 [me@host: myjs]$ ls *.js
2 test.js
3 [me@host: myjs]$ mocha
4
5
6 Array
7 #indexOf()
8 √ should return -1 when the value is not present
9
10
11 1 passing (16ms)
うーん、test.js はなんか勝手に探してるみたいだな、なんかヘンな感じ。
1 [me@host: myjs]$ cp -pf test.js test2.js
2 [me@host: myjs]$ emacs -nw test2.js
3 [me@host: myjs]$ cat test2.js
4 var assert = require('assert');
5 describe('Array', function() {
6 describe('#indexOf()', function() {
7 it('should return 1 when the value is not present', function() {
8 assert.equal([1,2,3].indexOf(2), 1);
9 });
10 });
11 });
12 [me@host: myjs]$ mocha
13
14
15 Array
16 #indexOf()
17 √ should return -1 when the value is not present
18
19
20 1 passing (14ms)
うーん、test2.js は拾ってないぞ。「test.js」という名前をスペシャルに扱ってるわけか。なんか気持ち悪い。
1 [me@host: myjs]$ mocha --file test2.js
2
3
4 Array
5 #indexOf()
6 √ should return 1 when the value is not present
7
8 Array
9 #indexOf()
10 √ should return -1 when the value is not present
11
12
13 2 passing (26ms)
あ、これは append か。test.js は頑なに拾うのね…。あ:
1 [me@host: myjs]$ mocha --help | head -2
2
3 Usage: mocha [debug] [options] [files]
なるほど、ターゲットのファイル名を並べればいいだけか:
1 [me@host: myjs]$ mocha test2.js
2
3
4 Array
5 #indexOf()
6 √ should return 1 when the value is not present
7
8
9 1 passing (15ms)
ふむ。なんか妙なインターフェイスだが、まぁいいか、気にしないでおこう。
失敗させてみる:
1 [me@host: myjs]$ cat test3.js
2 var assert = require('assert');
3 describe('Array', function() {
4 describe('#indexOf()', function() {
5 it('should return 1 when the value is not present', function() {
6 assert.equal([1,2,3].indexOf(3), 1); // 実装を間違えてみる
7 });
8 });
9 });
10 [me@host: myjs]$ mocha test3.js
11
12
13 Array
14 #indexOf()
15 1) should return 1 when the value is not present
16
17
18 0 passing (9ms)
19 1 failing
20
21 1) Array
22 #indexOf()
23 should return 1 when the value is not present:
24
25 AssertionError [ERR_ASSERTION]: 2 == 1
26 + expected - actual
27
28 -2
29 +1
30
31 at Context.<anonymous> (test3.js:5:14)
実際はコンソールでも色付きなのでまぁまぁ読めるよ。
うん、これで始められるかな。非同期ではそれなりに大変な気もするけれど、まぁなんとかなるだろきっと。