1.mocha(单元测试框架)
2.supertest(http测试)
3.assert(node核心assert模块)
4.express(nodejsweb框架)
1.普通方法测试
const assert=require('assert')
const sum=function(...rest){
let sum=0;
for(let n of rest){
sum+=n
}
return sum
}
describe("#test sum function",function(){
it('sum() should return 0',function(){
assert.strictEqual(sum(),0);
})//普通方法测试
})
2.异步方法测试
describe("#test fs",function(){
it('test async function',function(done){
fs.readFile('filepath',function(err,data){
if(err){
done(err)
}else{
let fun=new Function('return ' + data);
let r=fun();
assert.strictEqual(r,15);
done()
}
})
})//异步方法测试
})
3.http测试
app.js
const express=require('express')
const app=new express();
var bodyParser=require('body-parser');
app.use(bodyParser.json({limit: '1mb'})); //body-parser 解析json格式数据
app.use(bodyParser.urlencoded({ //此项必须在 bodyParser.json 下面,为参数编码
extended: true
}));
app.get("/",function(req,res){
console.log(req.query)
res.send({msg:"哈哈"});
});
app.post("/send",function(req,res){
let body=req.body;
console.log(body);
res.send({encode:body.name})
})
module.exports=app;
app-test.js
const request=require('supertest')
const app=require('./app')
describe("#test express app",function(){//http测试
let server;
before(function() {//执行测试用例前开启服务器
// runs before all tests in this block
server=app.listen(9999);
});
after(function() {//执行完后关闭服务器监听
// runs after all tests in this block
server.close();
});
beforeEach(function() {
// runs before each test in this block
});
afterEach(function() {
// runs after each test in this block
});
describe('#test server',function(){
it('#test get /',function(done){
request(server)
.get('/')
.query({n:1})
.expect(200,function(err,res){
if(err){
console.log(err)
done(err)
}else{
console.log(res.body)
done()
}
})
});
it('#test post /send',function(done){
request(server)
.post("/send")
.send({name:"wushichao"})
.expect(200,function(err,res){
if(err){
console.log(err)
done(err)
}else{
console.log(res.body)
done()
}
})
})
})
})
注:mocha 可以自动寻找项目下的test文件夹,并执行此文件夹下的js文件。