代码之家  ›  专栏  ›  技术社区  ›  blu

为什么Jest不在此节点测试中完成异步操作?

  •  0
  • blu  · 技术社区  · 6 年前

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

    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 以解决此问题。

    数据变量确实具有db查询的结果,API中更高级别的其他调用方可以很好地解析查询并继续执行其他语句。

    我试过:

    1. 这个 --探测手柄 国旗,但它没有显示任何东西。
    2. 获取数据2 万一是 the issue described here
    3. 路过 done test . 它确实存在,但调用它并不能修复警告。

    谢谢你的帮助,让这个快乐。

    • “笑话”:“^23.6.0”
    • “knex”:“^0.15.2”
    1 回复  |  直到 6 年前
        1
  •  6
  •   Mikael Lepistö    6 年前

    你需要打电话 knex.destroy() 在测试套件的最后,将连接池拆下。

        2
  •  10
  •   Dikshit Kathuria    5 年前

    要强制关闭Jest而不是DB连接,请执行以下操作:

    --forceExit
    

    所以我的测试脚本是这样的,

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