nodejs之单元测试-mocha和supertest

柴琦
2023-12-01

模块

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文件。

 类似资料: