gpt4 book ai didi

javascript - 连接到数据库的单元测试异步函数

转载 作者:IT王子 更新时间:2023-10-29 06:09:49 25 4
gpt4 key购买 nike

好吧,我有一些连接到数据库 (redis) 并返回一些数据的函数,这些函数通常基于 promise ,但它们是异步的并且包含流。我查看并阅读了一些有关测试的内容,然后选择使用 tape , sinon 和 proxyquire,如果我模拟这个函数,我怎么知道它有效?

以下函数(listKeys)在完成扫描后返回(通过 promise)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)
})
}
}

那么如何测试这样的函数?

最佳答案

我认为有几种方法可以通过测试执行此功能,所有方法都围绕配置测试流以供测试使用。

我喜欢先写我认为重要的测试用例,然后想办法实现它们。对我来说最重要的是像

it('should resolve cacheKeys on end')

然后需要创建一个流来提供给你的函数

var Stream = require('stream');
var stream = new Stream();

然后扫描流需要由你的测试来控制

你可以通过创建一个假客户端来做到这一点

client = {
scanStream: (config) => { return stream }
}

然后可以使用您的断言配置测试

var testKeys = ['t'];

Method.listKeys().then((cacheKeys) => {

assert(cacheKeys).toEqual(testKeys);
done()
})

现在您的 promise 正在等待带有断言的流将数据发送到流。

stream.emit('data', testKeys)

关于javascript - 连接到数据库的单元测试异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com