Node.js 使用nodejs、mocha、chai和sinon,我想存根一个在路由中调用的函数

Node.js 使用nodejs、mocha、chai和sinon,我想存根一个在路由中调用的函数,node.js,mocha.js,sinon,chai,Node.js,Mocha.js,Sinon,Chai,我有一个非常简单的应用程序,就是nodejs、express和mysql 我是单元测试新手,我认为这个应用程序是做得更好的好方法。 我试图完成的(我认为sinon就是答案)是模拟或存根mysql.insertEventToDB和rabbit.addToRabbitMQ 在我的应用程序中,我有 app.use('/sendgrid', sendgrid(pool, config, logger) ); 在我的sendgrid.js中 var express = require('express'

我有一个非常简单的应用程序,就是nodejs、express和mysql 我是单元测试新手,我认为这个应用程序是做得更好的好方法。 我试图完成的(我认为sinon就是答案)是模拟或存根mysql.insertEventToDB和rabbit.addToRabbitMQ

在我的应用程序中,我有

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;
}
感谢您的帮助/指导

请尝试使用

要伪造mysql.insertEventToDB

var fakeInsertEvt = sinon.stub(mysql, 'insertEventIntoDB');
然后,为了定义调用此伪函数时的行为,
onCall
的参数是调用此函数的编号

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

或者根据
var stub=sinon.stub(对象,“方法”,func),用一个回调函数伪造上述函数

var fakeInsertEvt = sinon.stub(mysql, 'insertEventIntoDB', function(){
                                          return Math.random();
                                    });
在您的例子中,第二个选项似乎更好,因为在
mysql.insertEventToDB
中有
for
循环

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