我有一个下面的函数,它使用mysql node js模块的流式查询行。如何对下面的函数进行单元测试,我还想模拟数据库行为,而不是在单元测试时连接到数据库processrow和wirtecsvfile函数都是同步任务。
function executeTask(sql_connection,sql_query) {
let query = sql_connection.query(sql_query);
let showInfo = {};
let showids = [];
query
.on('error', (error) => {
console.error(`error executing query --> ${error}`);
})
.on('result', function (row) {
sql_connection.pause();
processRow(row, showInfo, showids, function () {
sql_connection.resume();
});
})
.on('end', function () {
showids.forEach(showid => {
if (showInfo[showid].faults.length === 0) {
delete showInfo[showid];
}
});
wirteCsvFile(showInfo, (error, done) => {
if (error) {
console.error(error);
} else {
console.log("done");
process.exit();
}
})
});
}
2条答案
按热度按时间flmtquvp1#
我想我们可以嘲笑
sql_connection
一类事件发射器。希望有帮助
mwecs4sa2#
你可以用树桩
query
函数返回所需的内容,而不是向数据库发出请求:sinon.stub(connection, "query").callsFake(() => /* whatever you want here */);
你也应该休息一下executeTask
变成更小的函数,例如:现在你可以测试了
errorHandler
,resultHandler
,endHandler
分别地