没有测试的程序是不完整的,现在我们来编写测试用例,首先通过:
npm i mocha co-mocha co-supertest --save-dev
安装测试依赖的模块。然后修改 app.js,将:
app.listen(config.port, function () {
console.log('Server listening on: ', config.port);
});
修改为:
if (module.parent) {
module.exports = app.callback();
} else {
app.listen(config.port, function () {
console.log('Server listening on: ', config.port);
});
}
这里通过 module.parent
判断该文件是否被引用,被引用则导出 app.callback()
以供测试,否则通过 app.listen
启动程序。以 signup 为例,我们来看看如何编写测试用例,其余的读者可自行完成。新建 test/signup.js,添加如下代码:
var User = require('../models').User;
var request = require('co-supertest');
var app = require('../app');
describe('/signup', function () {
var agent = request.agent(app);
before(function (done) {
User.remove({name: 'nswbmw'}, done);
});
after(function (done) {
User.remove({name: 'nswbmw'}, done);
});
it('GET /signup without cookie', function* () {
yield agent.get('/signup').expect(200).end();
});
it('POST /signup without cookie', function* () {
yield agent
.post('/signup')
.send({
name: 'nswbmw',
email: 'nswbmw@example.com',
password: '123456',
re_password: '123456',
gender: '男',
signature: '你是我的小呀小苹果~'
})
.expect(302)
.end();
});
it('GET /signup with cookie', function* () {
yield agent.get('/signup').expect(302).end();
});
it('POST /signup with cookie', function* () {
yield agent
.post('/signup')
.send({
name: 'nswbmw',
email: 'nswbmw@example.com',
password: '123456',
re_password: '123456',
gender: '男',
signature: '你是我的小呀小苹果~'
})
.expect(302)
.end();
});
});
这里我们通过 var agent = request.agent(app)
使得之后每次请求(agent.get
或 agent.post
等)都带上 cookies,before()
和 after()
分别用来在测试前和测试后清理测试数据。最后,修改根目录下的 package.json,在 scripts 中添加:
"test": "./node_modules/mocha/bin/mocha --require co-mocha"
运行以下命令进行测试:
npm test