是否可以使用sinon为require('promise-mysql')
npm包模拟NodeJS中的promisified查询。因为Sinon允许我们在对象上模拟和/或删除方法。假设我想覆盖createConnection()方法,以便它返回一个有效的对象,无论数据库设置是否正确,我都会删除该方法。我能够使用具有回调功能的require('mysql')
npm包来模拟它。
但是,当require('promise-mysql')
包返回promise时,我不确定如何模拟测试数据。
对于require('mysql')
套餐,这非常有效
var successConnectionObject = {
connect: function(cb) {
cb();
},
query: function(sqlQury, cb) {
if (sqlQury === 'SELECT * FROM USERS') {
cb(null, constants.USERQueryResp);
} else {
cb(null, '');
}
},
end: function() {}
}
var testMysqlDriver = require('mysql');
var stub = sinon.stub(testMysqlDriver, 'createConnection');
stub.returns(successConnectionObject);
publish.handler(some_JSON_Request, some_Context_Values, function(err, data) {
expect(data.message).toBe(USER_Query_Response);
done();
});
我们如何使用require('promise-mysql');
答案 0 :(得分:0)
您可以使用Promise.resolve
和Promise.reject
作为返回值
var successConnectionObject = {
connect: function() {
return Promise.resolve()
},
query: function(sqlQury) {
if (sqlQury === 'SELECT * FROM USERS') {
return Promise.resolve(constants.USERQueryResp);
} else {
return Promise.resolve(';')
}
},
end: {function() {}
}
如果您的nodejs
版本没有Promise
,您可以使用bluebird
或任何其他Promise库
var Promise=require('bluebird')