如何修复错误Jest检测到以下3个打开句柄可能使Jest退出

时间:2018-06-12 13:23:58

标签: node.js tdd jestjs

刚开始使用jest进行某些节点应用程序测试。 express-generator用于脚手架 在第一次测试时,我得到以下错误:

  

Jest检测到以下3个打开的句柄可能会让Jest退出

重现的步骤:

git clone git@github.com:gandra/node-jest-err-demo.git   
cd node-jest-err-demo       
npm install   
cp .env.example .env    
npm run test  

npx envinfo --preset jest输出:

npx: installed 1 in 1.896s

  System:
    OS: macOS High Sierra 10.13.4
    CPU: x64 Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz   Binaries:
    Node: 9.3.0 - /usr/local/bin/node
    Yarn: 1.5.1 - /usr/local/bin/yarn
    npm: 5.7.1 - /usr/local/bin/npm   npmPackages:
    jest: ^23.1.0 => 23.1.0

知道怎么解决吗?

以下是github上的相关问题:https://github.com/facebook/jest/issues/6446

2 个答案:

答案 0 :(得分:4)

detectOpenHandles选项用于检测打开句柄,通常应该使用它。该错误警告可能打开句柄:

  

Jest检测到以下4个打开句柄,可能使Jest退出

即使手柄将关闭,错误仍会出现。

此应用程序的实际问题是数据库连接并未真正关闭:

if (process.env.NODE_ENV === 'test') {
  mongoose.connection.close(function () {
    console.log('Mongoose connection disconnected');
  });
}

由于某些原因,NODE_ENVdev,尽管the documentation表示预计会test

在应用程序启动时立即关闭数据库连接可能会导致实际使用数据库连接的单元出现问题。如指南中所述,MongoDB连接应该在测试结束时。由于使用了默认的Mongoose连接,因此可以是:

afterAll(() => mongoose.disconnect());

答案 1 :(得分:0)

这就是我为解决此问题所做的事情。

$ticks: 41;
$deg: 180;

.radial {
  @for $i from 0 through $ticks - 1 {
    .tick:nth-child(#{$i + 1}) {
      transform: rotate( ($i / ($ticks - 1)) * $deg + deg ) ;
    }
  }
}

然后我在出现问题的特定测试中设置了jest.setTimeout。

    afterAll(async () => {
  await new Promise(resolve => setTimeout(() => resolve(), 10000)); // avoid jest open handle error
});

如上所述,请关闭其他打开的手柄。