那么我有一些连接到数据库(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? –