如何使用 sinon 模拟 promisified Mysql 数据进行单元测试
How to mock promisified Mysql data using sinon for Unit Testing
是否可以在 NodeJS 中使用 sinon 为 require('promise-mysql')
npm 包模拟 promisified 查询。由于 Sinon 允许我们模拟和/或清除对象上的方法。假设我想重写 createConnection() 方法,以便它 returns 成为一个有效的对象,而不管数据库设置是否正确,我都会取消该方法。我可以使用具有回调的 require('mysql')
npm 包来模拟它。
但是,正如 require('promise-mysql')
包 returns 所承诺的那样,我不确定如何为此模拟测试数据。
对于 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');
实现同样的效果
您可以使用 Promise.resolve
和 Promise.reject
作为 return 值
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')
是否可以在 NodeJS 中使用 sinon 为 require('promise-mysql')
npm 包模拟 promisified 查询。由于 Sinon 允许我们模拟和/或清除对象上的方法。假设我想重写 createConnection() 方法,以便它 returns 成为一个有效的对象,而不管数据库设置是否正确,我都会取消该方法。我可以使用具有回调的 require('mysql')
npm 包来模拟它。
但是,正如 require('promise-mysql')
包 returns 所承诺的那样,我不确定如何为此模拟测试数据。
对于 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');
您可以使用 Promise.resolve
和 Promise.reject
作为 return 值
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')