今回はMochaを使った、APIのIntegration Testについてです。
アプリを作っていると、APIも見たり書いたり、アップデートしたりするのですが、
アップデートするごとに、他のAPIへ影響していないかをテストします。
Mochaは、JavaScriptのテストフレームワークです。
とりあえずインストールします。
npm install mocha -g
これでmochaコマンドが実行可能です。
次に、APIのテストなので、requestモジュールをインストールしました。
npm install request
requestに、APIの条件に合わせてqsやGET/POSTを変更しつつ、
ひと通りAPIを叩きますが、
まずは、成功するケース、失敗するケース等をひと通り書きだします。
ケースを出し終わったらプログラミングしていきます。
例として、xxxというAPIを叩くテストとしましょう。
var request = require('request') , assert = require('assert'); describe('xxx API test', function() { before(function(done) { // ログインや、テスト前に設定する事 done(); }); after(function(done) { // 一連のテスト終了後に行う処理 done(); }); it('ログインのテスト 成功ケース', function(done) { request({ url : 'ログインURL', qs : { username : '正しいユーザ名', password : '正しいパスワード' } }, function(err, res, body) { assert.equal(err, null, 'Request Error ' + JSON.stringify(err)); assert.equal(res.statusCode, 200, 'HTTP Status Code is not 200:' + res.statusCode); assert.notEqual(body, null, 'Body is null'); var json = JSON.parse(body); assert.equal(json.status, 0, 'Status Code is not 0'); done(); }); }); it('ログインのテスト 不正ユーザ名', function(done) { request({ url : 'ログインURL', qs : { username : '間違ったユーザ名', password : '正しいパスワード' } }, function(err, res, body) { assert.equal(err, null, 'Request Error ' + JSON.stringify(err)); assert.equal(res.statusCode, 200, 'HTTP Status Code is not 200:' + res.statusCode); assert.notEqual(body, null, 'Body is null'); var json = JSON.parse(body); assert.notEqual(json.status, 0, 'Status Code is not 0'); assert.equal(json.error_message, 'ユーザ名かパスワードが不正です。', 'Error Message is wrong.\n' + body); done(); }); }); });
テストコードを書いたらこのテストを実行してみます。
mocha test_xxxx.jsそれぞれのテストに対して成功・失敗の判定が出ます。
done()へ行くまでのassertが全て成功していれば成功になります。
TAP形式にて出力する場合は
mocha -R tap test_xxxx.js
ちなみに、TAP形式では、なぜかJenkinsでParseErrorになるので、
JUnit形式での出力にしています。
JUnit形式にて出力する場合は
mocha -R xunit test_xxxx.js
複数のファイルをテストする場合には、
mocha -R xunit test_*.jsと実行してやれば、名前順にテストを実行してくれます。
0 件のコメント:
コメントを投稿