使用node-mssql庫從SQL中提取數據。我一直在使用Sinon(寫了大約200次測試);如果把這個圖書館收藏起來,我的頭腦很麻煩。代碼如下所示:如何使用Sinon使用mssql庫對數據庫進行交互存根?
var sql = require('mssql');
var conn = new sql.Connection(sqlConfig); // sqlConfig is connection info, defined elsewhere
conn.connect(function(err) {
var req, selectFromTable;
if (err != null) {
// handle error
}
req = new sql.Request(conn);
selectFromTable = "select * from DW." + table + " where DWCreatedDate >= '" + start + "' and DWCreatedDate <= '" + end + "' ";
logger.debug("Selecting with: ", selectFromTable);
req.input('statement', sql.NVarChar, selectFromTable);
return req.execute('sp_executesql', function(err, results, returnValue, affected) {
if (err != null) {
// etc.
} else {
// data processing
}
});
});
代碼正常工作。現在我正在爲它寫一個測試。我知道這個圖書館很難測試,所以我拖延了。我最近代碼:
var conn, reqExecute, sqlReqStub;
sqlReqStub = sinon.stub();
sqlReqStub.execute = sinon.stub();
sinon.stub(sql, 'Request').returns(sqlReqStub);
conn = sinon.stub();
sinon.stub(sql, 'Connection').returns(conn);
conn.connect = sinon.stub().callsArgWith(0, null);
reqExecute = sqlReqStub.execute.withArgs('sp_executesql').onFirstCall().callsArgWith(1, null, {
a: 1
});
你的自然傾向,他們會說「好了,用createStubInstance
」但是當我使用的是我回來的連接對象(new sql.Connection(config)
)有TediousRequest(什麼庫默認爲當它建立了連接內部的驅動程序對象),而不是我的存根請求。我無法在sql
對象中的任何位置找到TediousRequest來將它存根。
我被困在這裏;希望有人有這樣做的代碼或可以解釋我做錯了什麼。