nodeでテスト書いた
mocha
読み方はモカらしい。
mochaはjavascriptの単体テストで使われるフレームワーク。
普段テストあまり書かないけど(学生プログラマー感丸出し)、
「テスト書かねば!!」ってなったので導入してみた。
導入
1 2 3 |
npm install -g mocha |
以上。
テスト
最小構成はこんな感じ。
値の検証をするassertはrequireしてね。
test1.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var assert = require('assert'); describe('mochaのテストの開始', function() { it('メンバーが6人いることを確認する',function() { var team_a_members = 4; var team_b_members = 2; var all_members = team_a_members + team_b_members; assert(all_members,6); }); }); |
テスト通してみます。
1 2 3 |
mocha hoge.js |
といった形で通します。
こんな感じ。
ファイル名単体で指定ではなくて、ディレクトリ内に複数のテストファイルがあるときは
1 2 3 |
mocha . |
でおk
テストを増やすときは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
var assert = require('assert'); describe('mochaのテストの開始', function() { it('メンバーが6人いることを確認する',function() { var team_a_members = 4; var team_b_members = 2; var all_members = team_a_members + team_b_members; assert(all_members,6); }); it('メンバーが7人いることを確認する',function() { var team_a_members = 4; var team_b_members = 3; var all_members = team_a_members + team_b_members; assert(all_members,7); }); it('hogehoge',function(done) { }); }); |
こんな感じでitを増やしていく感じ。
以下、ちゃんとしたテストで通します。
で、さっきの出力結果では、テスト通ったことはわかるけど、何のテストしたんだっけ?ってなるので
1 2 3 |
mocha -R reporter_name hoge.js |
このreporter_nameに出力形式を入れます。
例えば
spec
個人的にはこれで出力するようにしている。
dot
見にくいと思いますが、5つテストしたから、dotが5つある。
tap
うーん、まだましかな?
nyan
にゃん?
猫かわいい。
テスト通ったご褒美で猫が見たいときにはオススメだ。
他多数あります。
もうちょっとテストのお話
もちろん、beforeとかafterとかもしっかりしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
describe('mochaのテストの開始', function() { before(function(done) { // テストが始まる前の処理 done(); }); after(function(done) { // テストが終わった後の処理 done(); }); beforeEach(function(done) { // 各テストごとの始まったあとの処理 done(); }); afterEach(function(done) { // 各テストごとの終わった後の処理 done(); }); describe('mochaのテストの開始', function() { it('メンバーが6人いることを確認する',function() { ・・・・・ |
done
上記のbeforeの中とかにあるdoneは
done()すると次のテストに行く。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
describe('mochaのテストの開始', function() { it('A',function(done) { done(); }); it('B',function(done) { done(); }); }); |
これでA→Bが保証される。
done書いているのに、最後done()で終わらないと
Error:timeout of 2000ms exceeded
のエラーが出る
というわけで導入編書いてみましたー。
こーへい