1, Mocha 是一个基于node.js和浏览器的集合各种特性的Javascript测试框架,并且可以让异步测试也变的简单和有趣。Mocha的测试是连续的,在正确的测试条件中遇到未捕获的异常时,会给出灵活且准确的报告。
2, Should.js 是一个BBD风格的断言库.
3, SuperTest 是 superagent的孪生库,用于node的模拟HTTP请求的库.
以上都是由大名鼎鼎的TJ Holowaychuk写的.
创建并进入我们的项目目录test-example
运行以下命令
npm init -y
npm i express --save
npm i mocha should supertest --save-dev
要根目录下创建项目主文件app.js
'use strict';
var express = require('express');
var app = express();
app.set('port', process.env.PORT || 3000 );
//获取文章API
app.get('/article/:id', function (req, res) {
//...
});
app.listen(app.get('port'),function () {
console.log('Express server listening on %d', app.get('port'));
});
module.exports = app;
通过node app.js 可以启动项目.
在项目目录下新建测试文件 test/index.js 我们期望当请求获取文章API时以JSON格式返回文章的内容.
'use strict';
var app = require('../app.js');
var should = require('should');
var request = require('supertest')(app);
describe('/article/:id', function() {
before(function () {
});
it('should return json data',function (done) {
request.get('/article/10001')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
.end(function (err,res) {
if (err) return done(err);
done();
});
});
});
为了方便测试,修改package.json文件.增加:
"scripts":{
"test":"mocha test"
}
然后执行 mocha test
发现测试未能通过,修改api
app.get('/article/:id', function (req, res) {
return res.status(200).json();
});
测试通过.
修改测试文件,期望只有ID等于10001时才返回200,否则返回404.并且成功返回数据必须包括title和content字段.
'use strict';
var app = require('../app.js');
var should = require('should');
var request = require('supertest')(app);
describe('/article/:id', function() {
before(function () {
});
it('should return json data',function (done) {
request.get('/article/10001')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
.end(function (err,res) {
if (err) return done(err);
res.body.title.should.be.ok();
res.body.content.should.be.String();
done();
});
});
it('should when id not 10001 return 404',function (done) {
request.get('/article/10002')
.set('Accept', 'application/json')
.expect(404)
.end(function (err,res) {
if (err) return done(err);
done();
});
});
});
运行npm test 未能通过测试.修改API使测试通过.
//获取文章
app.get('/article/:id', function (req, res) {
var aid = req.params.id;
if(aid === '10001'){
return res.status(200).json({
title:"中国世界第一",
content:"人均也是第一"
});
}else{
return res.status(404).send();
}
});
本文测试样例下载地址: https://github.com/jackhutu/test-example/tree/mocha-should-supertest
世界你好.
hhhhh
bbbb
123
11223
kmbnjn
jkmnlk
245465464
111
不是上班