那麼我有一些連接到數據庫(redis)並返回一些數據的函數,這些函數通常是基於promises但是是異步的並且包含流。我查閱了一些關於測試的內容,並且選擇了tape,sinon和proxyquire,如果我嘲笑這個函數,我會如何知道它的工作原理?連接數據庫的單元測試異步功能
以下函數(listKeys)在完成掃描後返回(通過承諾)存在於redis數據庫中的所有密鑰。
let methods = {
client: client,
// Cache for listKeys
cacheKeys: [],
// Increment and return through promise all keys
// store to cacheKeys;
listKeys: blob => {
return new Promise((resolve, reject) => {
blob = blob ? blob : '*';
let stream = methods.client.scanStream({
match: blob,
count: 10,
})
stream.on('data', keys => {
for (var i = 0; i < keys.length; i++) {
if (methods.cacheKeys.indexOf(keys[i]) === -1) {
methods.cacheKeys.push(keys[i])
}
}
})
stream.on('end',() => {
resolve(methods.cacheKeys)
})
stream.on('error', reject)
})
}
}
那麼,你如何測試這樣的功能?
https://github.com/WhoopInc/supertest-as-promised? –