一、开发环境
开发IDE: vscode,node
参考书籍《node.js入门经典》
二、断言assert
node自带断言模块assert,提供了简单测试的框架。以下是简单的测试样例
var assert = require('assert');
assert.equal('',0);
assert.strictEqual('',0);
通过var assert = require('assert');命令获取断言模块,调用方法编写测试。equal方法返回的是运算符 == 返回的结果,strictEqual方法返回的是运算符 === 的结果。上述结果应为true和false.
若测试成功,终端应该看不到任何输出,若测试失败,则应抛出异常。
三、mocha模块
1. mocha和mongoose, socket.io一样,是第三方模块,用于使用模块化方法测试node.js程序,使用前需要通过npm安装相关依赖。项目链接:https://github.com/mochajs/mocha
2. 为项目添加测试模块。新建tasks.js文件,写入以下代码
var http = require('http');
var assert = require('assert');
describe('api v1', function(){
describe('GET /api/v1/tasks', function(){
it('should return a 200 response', function(done){
http.get({
path: '/api/v1/tasks',
port: 3000
}, function(res){
assert.equal(res.statusCode, 200, 'Expected: 200 Actual: ' + res.statusCode);
done();
})
})
it('should return JSON', function(done){
http.get({
path: '/api/v1/tasks',
port: 3000
}, function(res){
assert.equal(res.headers["content-type"], "application/json; charset=utf-8",
'Expected: application/json; charset=utf-8 Actual: ' + res.headers["content-type"]);
done();
})
})
})
})
可以看到mocha模块使用时语法和英语语法非常相近。在it方法第一个参数中描述了具体要做的内容,在回调函数中写入执行的操作。以上代码所做的事情是当访问 localhost:3000/api/v1/tasks 时判断端口号是否为3000和是否以JSON格式返回内容。
3. app.js中与测试相关的代码
app.use('/api/v1/tasks', function(req, res, next){
Task.find({}, function(err, doc){
res.send(doc);
});
});
4. 在package.json中添加依赖,写入npm test命令。或者也可以直接在控制台使用mocha tasks.js命令
{
"name": "example",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js",
"test": "mocha tasks.js"
},
"dependencies": {
"express": "^4.16.3",
"mongoose": "~4.0.0",
"cookie-parser": "~1.4.3"
},
"devDependencies": {
"mocha": "^5.2.0"
}
}
5. 应该获取的结果