Wil*_*ang 7 node.js node-redis jestjs
我正在尝试使用redis和jest运行集成测试.
它始终抛出"Jest检测到以下1个打开的句柄可能使Jest退出:"与--detectOpenHandles一起运行时出错.
它没有挂起,因此套接字正在关闭,但是如何编写它以便它不会抛出该警告?
我的代码
import redis from 'redis';
let red: redis.RedisClient;
beforeAll(() => {
red = redis.createClient();
});
afterAll((done) => {
red.quit(() => {
done();
});
});
test('redis', (done) => {
red.set('a', 'b', (err, data) => {
console.log(err);
red.get('a', (err, data) => {
console.log(data);
done();
});
});
});
Run Code Online (Sandbox Code Playgroud)
警告
Jest has detected the following 1 open handle potentially keeping Jest from exiting:
? TCPWRAP
3 |
4 | beforeAll(() => {
> 5 | red = redis.createClient();
| ^
6 | });
7 |
8 | afterAll((done) => {
at RedisClient.Object.<anonymous>.RedisClient.create_stream (node_modules/redis/index.js:251:31)
at new RedisClient (node_modules/redis/index.js:159:10)
at Object.<anonymous>.exports.createClient (node_modules/redis/index.js:1089:12)
at Object.<anonymous>.beforeAll (src/sockets/redis.integration.test.ts:5:17)
Run Code Online (Sandbox Code Playgroud)
使用常规jest运行已编译的代码会引发相同的警告.编译后的代码几乎完全相同.
Wil*_*ang 14
发帖后想通了。我忘了在这里发布答案。
它与如何redis.quit()处理其回调有关。
它创建了一个新线程,因此我们需要等待整个 eventloop 堆栈再次循环。请参阅下面的解决方法。
async function shutdown() {
await new Promise((resolve) => {
redis.quit(() => {
resolve();
});
});
// redis.quit() creates a thread to close the connection.
// We wait until all threads have been run once to ensure the connection closes.
await new Promise(resolve => setImmediate(resolve));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |