刚开始使用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
答案 0 :(得分:4)
detectOpenHandles
选项用于检测打开句柄,通常应该使用它。该错误警告可能打开句柄:
Jest检测到以下4个打开句柄,可能使Jest退出
即使手柄将关闭,错误仍会出现。
此应用程序的实际问题是数据库连接并未真正关闭:
if (process.env.NODE_ENV === 'test') {
mongoose.connection.close(function () {
console.log('Mongoose connection disconnected');
});
}
由于某些原因,NODE_ENV
为dev
,尽管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
});
如上所述,请关闭其他打开的手柄。