Is it possible to mock promisified queries in NodeJS using sinon for require('promise-mysql')
npm package. As Sinon allows us to mock and / or stub out methods on objects. Say I want to override the createConnection() method so that it returns a valid object regardless of whether the database settings were right or not, I'd stub out that method. I am able to mock that using require('mysql')
npm package which is having callbacks.
But, as require('promise-mysql')
package returns promise, I am not sure about how to mock test data for same.
For require('mysql')
package this is working perfectly
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();
});
how can we achieve same this using require('promise-mysql');
You can use Promise.resolve
and Promise.reject
as return values
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() {}
}
If your nodejs
version don't have Promise
, you can use bluebird
, or any other Promise library
var Promise=require('bluebird')