为什么Jest无法完成此Node测试中的异步操作?

时间:2018-11-12 17:06:10

标签: node.js jestjs knex.js

我有以下简单的测试设置:

test('what did I do to deserve this', async () => {
  expect.assertions(1)

  const data = await fetchData() // or fetchData2 
  expect(data).toBe('peanut butter')
})

async function fetchData () {
  return "peanut butter"
}

async function fetchData2 () {
  return knex.select('name').from('foos')
}

当我使用fetchData时,笑话很开心。
但是当我使用fetchData2时,它会抱怨:

  

测试运行一秒钟后,Jest没有退出。

     

这通常意味着有些异步操作不是   在测试中停止了。考虑使用   --detectOpenHandles来解决此问题。

data变量确实具有db查询的结果,并且API中其他高级调用者可以很好地解决查询并继续执行其他语句。

我尝试过:

  1. --detectOpenHandles标志,但没有显示任何内容。
  2. fetchData2the issue described here的情况下传递期望值
  3. done arg传递给test中的异步函数。它确实存在,但是调用它不能解决警告。
  4. 向其投掷try / catch块

谢谢您的帮助。

事物的版本:

  • 节点v11.1.0
  • “笑话”:“ ^ 23.6.0”
  • “ knex”:“ ^ 0.15.2”

2 个答案:

答案 0 :(得分:4)

要强制关闭Jest而不是DB Connection:

--forceExit

所以我的测试脚本看起来像这样,

"scripts": {
        "test": "jest --forceExit"
    }

答案 1 :(得分:1)

您需要在测试套件的末尾调用knex.destroy()才能拆除连接池。