jest和mongoose-jest已检测到打开的句柄

jest和mongoose-jest已检测到打开的句柄,mongoose,jestjs,Mongoose,Jestjs,因此,我使用jest测试我的node.js应用程序,测试完成得很好,但我从jest那里得到了一条关于开放句柄的消息。有什么见解吗 开玩笑——侦探本汉德斯 通过src/libs/user/测试/user\u model\u test.js通过 src/测试/app_test.js通过 src/libs/user/测试/user\u service\u test.js 测试套件:3项通过,共3项测试:14项通过,共14项 快照:0总时间:7.209s运行所有测试套件 Jest检测到以下4个打开的句柄

因此,我使用
jest
测试我的node.js应用程序,测试完成得很好,但我从jest那里得到了一条关于开放句柄的消息。有什么见解吗

开玩笑——侦探本汉德斯

通过src/libs/user/测试/user\u model\u test.js通过 src/测试/app_test.js通过 src/libs/user/测试/user\u service\u test.js

测试套件:3项通过,共3项测试:14项通过,共14项 快照:0总时间:7.209s运行所有测试套件

Jest检测到以下4个打开的句柄可能保留 开玩笑说不要退出:

● 允诺

  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)
2 |//我们使用测试数据库进行测试
3 | var mongoDB=mongodb://localhost/my_db_conn';
>4 |猫鼬连接(mongoDB);
|          ^
5 | const User=require('../User_model');
6 |
7 |描述(“用户模型测试”,()=>{
在NativeConnection.Object..Connection.openUri(node_modules/mongoose/lib/Connection.js:424:19)
在Mongoose.Object..Mongoose.connect(node_modules/Mongoose/lib/index.js:208:15)
at对象。(src/libs/user/__测试_;/user_模型_测试.js:4:10)
● 允诺

  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)
8 |});
9 |
>10 | module.exports=mongoose.model(“用户”,UserSchema);
|                           ^
在Function.init(node_modules/mongoose/lib/model.js:962:16)
在Mongoose.Object..Mongoose.model(node_modules/Mongoose/lib/index.js:392:11)
反对。(src/libs/user/user_model.js:10:27)
反对。(src/libs/user/_______/user_model_test.js:5:14)
● 允诺

  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)
8 |});
9 |
>10 | module.exports=mongoose.model(“用户”,UserSchema);
|                           ^
在Function.init(node_modules/mongoose/lib/model.js:962:16)
在Mongoose.Object..Mongoose.model(node_modules/Mongoose/lib/index.js:392:11)
反对。(src/libs/user/user_model.js:10:27)
反对。(src/libs/user/index.js:1:41)
● 允诺

  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)
3 | var mongoose=require('mongoose');
4 | var mongoDB=mongodb://localhost/my_db_conn';
>5 |猫鼬连接(mongoDB);
|          ^
6 |
7 |描述(‘应用程序测试’,()=>{
8 |它('有一个模块',()=>{
在NativeConnection.Object..Connection.openUri(node_modules/mongoose/lib/Connection.js:424:19)
在Mongoose.Object..Mongoose.connect(node_modules/Mongoose/lib/index.js:208:15)
at对象。(src/__测试_;/app_测试.js:5:10)

它与返回承诺的
model.init
函数相关。快速修复方法是在创建如下模型时传递
skipInit
标志:

const User=mongoose.model(“用户”,userSchema,“用户”,true)

skipInit
是此函数中的第四个参数

但在这种情况下,它不会初始化模型的索引,因此最好根据
process.env.NODE\u env

const skipInit=process.env.NODE\u env==“测试”

const User=mongoose.model(“users”,userSchema,“users”,skipInit)

测试后,mongoose连接似乎保持打开状态,请尝试以下操作之一:

  • 测试后关闭服务器实例

    const server = require('./app'); //server instance    
    server.close(); //put in afterAll or afterEach depending on your test
    
  • 完成所有测试后关闭数据库连接

    afterAll(()=>{ mongoose.connection.close();});
    
  • 使用async/await包装mongoose连接

    async function(){
       await mongoose.connect(mongoDB);
    };
    
  • 试试一个或一个组合。
    这些是我的解决方案,因为我看不到你的代码。

    我刚开始的项目几乎是空的,没有任何模型,也有相同的错误。所以这至少对我不起作用。@Alex我使用了你的答案,它起作用了-它可以防止开玩笑抱怨公开的承诺。但是,我不确定它是否有其他问题。在我的实时数据库中,它正确tly抱怨重复的电子邮件,因为它是一个唯一的字段。在我通过mockgoose的测试数据库中,它没有错误。我只能假设,因为设置skipInit=false,但我正在继续调查