
今回は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 件のコメント:
コメントを投稿