使用nodejs,mocha,chai和sinon我想存根在路由中调用的函数
问题描述:
我有一个非常简单的应用程序,它是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();
});
});
感谢您的帮助/方向
答
请尽量使用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
。