nodejs之單元測試-mocha和supertest

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章