2016-03-08 45 views
1

我有一個非常簡單的應用程序,它是nodejs,express和mysql 我是單元測試新手,我認爲這個應用程序是一個更好的方法。 什麼,我試圖完成(我認爲興農是答案)是嘲笑或存根mysql.insertEventIntoDB和我的應用程序rabbit.addToRabbitMQ使用nodejs,mocha,chai和sinon我想存根在路由中調用的函數

我有

app.use('/sendgrid', sendgrid(pool, config, logger)); 

在我sendgrid.js我有

var express = require('express'); 
var mysql = require('../app/utils/mysql'); 
var rabbit = require('../app/utils/rabbitMQ'); 

module.exports = function (dbpool, config, logger) { 
    var router = express.Router(); 

    router.post('/callback', function (req, res) { 
    for (var x=0 ; x < req.body.length ; x++){ 
     mysql.insertEventIntoDB(dbpool, req.body[x], logger); 
     rabbit.addToRabbitMQ(config,req.body[x], logger) 
    } 
    res.json({ status: 'OK' }); 
    }); 

    return router; 
} 

我已經看到了很多例子存根和spys的,但只是無法弄清楚如何從這些測試做。這是我的測試中的一個例子

it('should get an OK for delivered POST', function(done) { 
chai.request(server) 
    .post('/sendgrid/callback') 
    .send(delivered) 
    .end(function(err, res){ 
    res.should.have.status(200); 
    res.should.be.json; 
    res.body.should.be.a('object'); 
    res.body.should.have.property('status'); 
    res.body.status.should.equal('OK'); 
    done(); 
    }); 
}); 

感謝您的幫助/方向

回答

2

請儘量使用sinon.stub

var stub = sinon.stub(object, "method"); 

僞造的mysql.insertEventIntoDB

var fakeInsertEvt = sinon.stub(mysql, 'insertEventIntoDB'); 

然後在調用這個假函數時定義它的行爲,參數爲onCall是調用這個函數的次數。

fakeInsertEvt.onCall(0).return(0); 

或根據var stub = sinon.stub(object, "method", func);,僞造一個回調函數

var fakeInsertEvt = sinon.stub(mysql, 'insertEventIntoDB', function(){ 
              return Math.random(); 
            }); 

在你的情況下,上述功能,似乎第二個選項可能會更好,因爲有for環出mysql.insertEventIntoDB

相關問題