mocha的异步API测试是一个非常好的功能,能让我们直接在terminal测试API是否有效,不需要在浏览器一个个访问,并且还可以对非法参数、非法操作等等加以检测。
一下是一个非常基本的分页测试用例写法:
var assert = require("assert")
var async = require("async");
module.exports = function() {
describe('lottery api test', function() {
//没有token不能获取
it('failed to get without token', function(done){ //外部函数
async.series({
action: function(callback){
query('/api的路径', {token: 'basic-none'})//query方法需要自己定义
.then(function() { //进去之后代表进入api成功,完成。
done();
}, function(err){ //进入api失败
callback(new Error("should not get "));
});
}
}, function(err, results){ //外部函数执行失败
done(err);
});
});
//有token可以获取
it('success to get with token', function(done){
async.series({
action: function(callback){
query("/api的路径", {token: 'basic-valid'})
.then(function() {
done();
}, function(err) {
console.info(err);
callback(new Error('should able to get '));
});
}
}, function(err, results) {
done(err);
});
});
//获取
it('success to get lottery history', function(done) {
async.series({
action: function(callback) {
base.get('/api的路径', {
token: 'basic-valid'
}).then(function(results) {
done();
}, function(err) {
console.info(err);
callback(new Error('can not get '));
});
}
}, function(err, results) {
done(err);
});
});
//测试分页,基本思路,利用分页分别得到page、limit的前两个数据,并进行比较,如果相等即分页逻辑正确。
//参数解释:page表示当前的页数,limit为每页条数的限制(即每页有limit条记录)
var firstReply;
var secReply;
it('success to get paging', function(done) {
async.series({
action: function(callback) {
base.get('/api的路径?page=1&limit=2', { //获取第一页,每页两条数据,即前两条数据,分别赋值给firstReply和secReply
token: 'basic-valid'
}).then(function(results) {
firstReply = results.result[0].id;
secReply = results.result[1].id;
done();
}, function(err) {
console.info(err);
callback(new Error('can not paging'));
});
}
}, function(err, results) {
done(err);
});
});it('success to test first paging', function(done) {
async.series({
action: function(callback) {
base.get('/api的路径?page=1&limit=1', { //获取第一页,每页一条数据,即第一条数据,
token: 'basic-valid'
}).then(function(results) {
assert.equal(results.result.length, 1);//api获取的结果是否唯一
assert.equal(results.result[0].id, firstReply);//与firstReply比较
done();
}, function(err) {
console.info(err);
callback(new Error('can not get first paging'));
});
}
}, function(err, results) {
done(err);
});
});it('success to get second paging', function(done) {
async.series({
action: function(callback) {
base.get('/api的路径?page=2&limit=1', {//同上
token: 'basic-valid'
}).then(function(results) {
assert.equal(results.result.length, 1);
assert.equal(results.result[0].id, secReply);
done();
}, function(err) {
console.info(err);
callback(new Error('can not get second paging'));
});
}
}, function(err, results) {
done(err);
});
});
}