下面是我想要测试的路由:
app.post('/api/user', (req, res) => {
dbService.replaceUserOnDuplicate(req.body, function returnResponse(insertedId) {
if (insertedId === 0 || insertedId === req.body.id) {
return res.sendStatus(200);
}
// TODO_MINH: Send an appropriate error to handle by the front-end
return res.send({});
});
});我可以使用chai-http来做这样的事情(psuedo-code):
it('test', function (done) {
chai.request(server)
.post('/api/user')
.send({ user: SomeUserObject })
.end(function (err, res) {
res.should.have.status(200);
done();
});
});但是,api/用户路由进行数据库调用。我如何使用sinon来存根此方法(replaceUserOnDuplicate),以便它返回一个虚拟响应(如0或任何值)?
有可能吗?我正在研究Chai-HTTP语法,我没有看到插入任何Sinon存根方法的空间。
作为参考,这里是dbService (mySQL node.js):
replaceUserOnDuplicate: function(user, callback) {
this.tryConnect().getConnection(function(err, con) {
var sql = queries.ReplaceUserOnDuplicate;
// Insert parameters
con.query(sql, [user.id, user.googleID, user.gender, user.firstName, user.lastName, user.email, user.isProfileSetUp, user.location, user.phoneNumber,
// On Duplicate Key Update parameters
user.googleID, user.gender, user.firstName, user.lastName, user.email, user.isProfileSetUp, user.location, user.phoneNumber],
function (err, result) {
con.release();
if (err) throw err;
return callback(result.insertId);
});
});
},谢谢你的帮忙!
发布于 2017-10-25 01:21:27
一种可能的解决方案是:如果我使用中间件将req.db的属性设置为我们的dbService对象,那么我可以通过使用.send()向它们发送参数来依赖注入chai-http内的dbService调用。我相信.send()是可以链接的。
这是有效的吗?
示例(中间件):
var exposeDb = function(req, resp, next){
req.dbService= dbService;
next();
};
app.use('/api/user', exposeDb, next);https://stackoverflow.com/questions/46903023
复制相似问题