gpt4 book ai didi

node.js - 使用nodejs,mocha,chai和sinon我想 stub 一个在路由中调用的函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:05 24 4
gpt4 key购买 nike

我有一个非常简单的应用程序,即nodejs、express 和 mysql我是单元测试的新手,我认为这个应用程序是做得更好的好方法。我想要完成的事情(我认为 sinon 是答案)是模拟或 stub mysql.insertEventIntoDBrabbit.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;
}

我看过很多 stub 和 spy 的例子,但只是无法从这些测试中弄清楚如何做到这一点。这是我的一项测试的示例

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();
});

就您而言,似乎第二个选项可能更好,因为 mysql.insertEventIntoDB 中有 for 循环。

关于node.js - 使用nodejs,mocha,chai和sinon我想 stub 一个在路由中调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com