笑话和猫鼬-笑话已检测到打开的句柄 [英] jest and mongoose - jest has detected opened handles
问题描述
因此,我正在使用jest
来测试我的node.js应用程序,并且测试完成得很好,但是我从玩笑中得到了有关打开句柄的消息.有什么见识吗?
So I'm using jest
to test my node.js application and the tests finish fine but I'm getting a message from jest about open handles. Any insights?
开玩笑--detectOpenHandles
jest --detectOpenHandles
PASS src/libs/user/测试/user_model_test.js PASS src/测试/app_test.js通过 src/libs/user/测试/user_service_test.js
PASS src/libs/user/tests/user_model_test.js PASS src/tests/app_test.js PASS src/libs/user/tests/user_service_test.js
测试套件:3个通过,总共3个测试:14个通过,总共14个 快照:0个总时间:7.209s运行所有测试套件.
Test Suites: 3 passed, 3 total Tests: 14 passed, 14 total Snapshots: 0 total Time: 7.209s Ran all test suites.
Jest已检测到以下四个可能保持打开状态的句柄 开玩笑地说:
Jest has detected the following 4 open handles potentially keeping Jest from exiting:
●承诺
2 | // we use a test database for testing
3 | var mongoDB = 'mongodb://localhost/my_db_conn';
> 4 | mongoose.connect(mongoDB);
| ^
5 | const User = require('../user_model');
6 |
7 | describe("User model test", () => {
at NativeConnection.Object.<anonymous>.Connection.openUri (node_modules/mongoose/lib/connection.js:424:19)
at Mongoose.Object.<anonymous>.Mongoose.connect (node_modules/mongoose/lib/index.js:208:15)
at Object.<anonymous> (src/libs/user/__tests__/user_model_test.js:4:10)
●承诺
8 | });
9 |
> 10 | module.exports = mongoose.model("User", UserSchema);
| ^
at Function.init (node_modules/mongoose/lib/model.js:962:16)
at Mongoose.Object.<anonymous>.Mongoose.model (node_modules/mongoose/lib/index.js:392:11)
at Object.<anonymous> (src/libs/user/user_model.js:10:27)
at Object.<anonymous> (src/libs/user/__tests__/user_model_test.js:5:14)
●承诺
8 | });
9 |
> 10 | module.exports = mongoose.model("User", UserSchema);
| ^
at Function.init (node_modules/mongoose/lib/model.js:962:16)
at Mongoose.Object.<anonymous>.Mongoose.model (node_modules/mongoose/lib/index.js:392:11)
at Object.<anonymous> (src/libs/user/user_model.js:10:27)
at Object.<anonymous> (src/libs/user/index.js:1:41)
●承诺
3 | var mongoose = require('mongoose');
4 | var mongoDB = 'mongodb://localhost/my_db_conn';
> 5 | mongoose.connect(mongoDB);
| ^
6 |
7 | describe('App test', () => {
8 | it('has a module', () => {
at NativeConnection.Object.<anonymous>.Connection.openUri (node_modules/mongoose/lib/connection.js:424:19)
at Mongoose.Object.<anonymous>.Mongoose.connect (node_modules/mongoose/lib/index.js:208:15)
at Object.<anonymous> (src/__tests__/app_test.js:5:10)
推荐答案
与model.init
函数相关,该函数返回promise.快速解决方法是在创建模型时通过skipInit
标志:
It's related to model.init
function which returns promise. Quick fix will be to pass skipInit
flag while creating the model like this:
const User = mongoose.model("users", userSchema, "users", true)
skipInit
是此函数中的第四个参数
skipInit
is the fourth parameter in this function
但是在这种情况下,它不会为您的模型初始化索引,因此最好根据process.env.NODE_ENV
But in this case it will not initialize indexes for your model, so it's better to set this flag according to the process.env.NODE_ENV
const skipInit = process.env.NODE_ENV === "test"
const User = mongoose.model("users", userSchema, "users", skipInit)
const skipInit = process.env.NODE_ENV === "test"
const User = mongoose.model("users", userSchema, "users", skipInit)
这篇关于笑话和猫鼬-笑话已检测到打开的句柄的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!