【发布时间】:2017-10-24 05:47:48
【问题描述】:
这是我要测试的路线:
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 来做这样的事情(伪代码):
it('test', function (done) {
chai.request(server)
.post('/api/user')
.send({ user: SomeUserObject })
.end(function (err, res) {
res.should.have.status(200);
done();
});
});
但是,api/users 路由会进行数据库调用。我将如何使用 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);
});
});
},
感谢您的帮助!
【问题讨论】:
-
什么是数据库?它有一个可以注入的模拟吗?
-
在原帖中添加了相关的数据库调用。我的问题是,即使我可以模拟它,在语法上看起来如何?如何注射?
-
所以,我目前正在解决同样的问题。您发布的解决方案是您最终采用的解决方案吗?
标签: node.js unit-testing sinon chai chai-http