Redis测试通过后不退出(使用jest)

12

我为一个项目实现了基本的缓存功能,并在测试中遇到了一个问题。 我使用jest和redis-mock进行测试,所有测试都通过了。 问题出在当我导入一个导入了redis文件的文件时。 测试文件不存在。

示例:

index.test.js

import redis from 'redis'
import redis_mock from 'redis-mock'
jest.spyOn(redis, 'createClient').mockImplementation(red_mock.createClient)
import fileUsingRedis from './index'

describe('index', () => {
  it('should pass', () => expect(true).toBeTruthy())
}

index.js

import {set} from './redis'
export default function ...

redis.js

import redis from 'redis'
const client = redis.createClient()

export function set(key, value) {...}

'1 passed'...'Ran all test suites matching ...'

但是然后它就一直在等待,我猜是因为redis.createClient()是异步的或���其他什么原因。由于它发生在导入时,我不能简单地解决它。 我是否需要在每个测试之后关闭redis实例连接?

这里的解决方案/最佳实践是什么?


redis.createClient() 打开一个文件句柄,因此 jest 等待该句柄关闭。要知道哪些句柄仍然打开,可以使用 --detectOpenHandles 标志运行 jest。 - Koen.
1个回答

18

没错,关闭实例就解决了问题。

index.test.js

import redis from './redis'
...
afterAll(() => redis.closeInstance())

redis.js

export function closeInstance(callback) {
  client.quit(callback)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接