nodejs之单元测试-mocha和supertest

本文介绍了如何使用Mocha作为单元测试框架,Supertest进行HTTP测试,以及结合Node.js核心的assert模块进行断言,特别讨论了在Express应用中的测试实践。内容包括普通方法、异步方法的测试以及对HTTP接口的测试。

nodejs之单元测试-mocha和supertest

模块

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值