Node.js Mongoose,Supertest:Jest在测试运行完成一秒钟后没有退出

Node.js Mongoose,Supertest:Jest在测试运行完成一秒钟后没有退出,node.js,express,mongoose,jestjs,supertest,Node.js,Express,Mongoose,Jestjs,Supertest,我正在尝试使用jest和supertest来测试我的node.js+express应用程序。然而, 我不断收到错误消息“Jest在测试运行完成一秒钟后未退出” 如果我从app.js中删除mongoose.connect(…),一切正常,但我需要数据库 这是我的密码: app.js const express = require('express'); const mongoose = require('mongoose'); const keys = require('./config/keys

我正在尝试使用jest和supertest来测试我的node.js+express应用程序。然而, 我不断收到错误消息“Jest在测试运行完成一秒钟后未退出”

如果我从
app.js
中删除
mongoose.connect(…)
,一切正常,但我需要数据库

这是我的密码:

app.js

const express = require('express');
const mongoose = require('mongoose');
const keys = require('./config/keys');

mongoose.connect(keys.MONGO_URI, 
  { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true });

const app = express();

app.get('/user', (req, res) => {
  res.send("success");
})

//...

module.exports = app;
app.test.js

const mongoose = require('mongoose');
const app = require('../src/app');
const request = require('supertest');

describe('GET /user', function () {
    afterAll(() => mongoose.disconnect());
    it('has respononse status code 200', function (done) {
        request(app)
            .get('/user')
            .expect(200, done);
    });
});
错误消息:

> jest

 PASS  tests/app.test.js (6.798 s)
  GET /user
    √ has respononse status code 200 (22 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        6.875 s, estimated 7 s
Ran all test suites.

Jest did not exit one second after the test run has completed.

This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.

ReferenceError: You are trying to `import` a file after the Jest environment has been torn down.

      at BufferList.Readable (node_modules/readable-stream/lib/_stream_readable.js:179:22)
      at BufferList.Duplex (node_modules/readable-stream/lib/_stream_duplex.js:67:12)
      at new BufferList (node_modules/bl/bl.js:33:16)
      at new MessageStream (node_modules/mongodb/lib/cmap/message_stream.js:35:21)
      at new Connection (node_modules/mongodb/lib/cmap/connection.js:54:28)
C:\Users\XXX\server\node_modules\readable-stream\lib\_stream_readable.js:111
  var isDuplex = stream instanceof Duplex;
                        ^

TypeError: Right-hand side of 'instanceof' is not callable
    at new ReadableState (C:\Users\XXX\server\node_modules\readable-stream\lib\_stream_readable.js:111:25)
    at BufferList.Readable (C:\Users\XXX\server\node_modules\readable-stream\lib\_stream_readable.js:183:25)
    at BufferList.Duplex (C:\Users\XXX\server\node_modules\readable-stream\lib\_stream_duplex.js:67:12)
    at new BufferList (C:\Users\XXX\server\node_modules\bl\bl.js:33:16)      
    at new MessageStream (C:\Users\XXX\server\node_modules\mongodb\lib\cmap\message_stream.js:35:21)
    at new Connection (C:\Users\XXX\server\node_modules\mongodb\lib\cmap\connection.js:54:28)
    at C:\Users\XXX\server\node_modules\mongodb\lib\core\connection\connect.js:36:29
    at callback (C:\Users\XXX\server\node_modules\mongodb\lib\core\connection\connect.js:280:5)
    at TLSSocket.connectHandler (C:\Users\XXX\server\node_modules\mongodb\lib\core\connection\connect.js:325:5)
    at Object.onceWrapper (node:events:433:28)
    at TLSSocket.emit (node:events:327:20)
    at TLSSocket.onConnectSecure (node:_tls_wrap:1527:10)
    at TLSSocket.emit (node:events:327:20)
    at TLSSocket._finishInit (node:_tls_wrap:932:8)
    at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:706:12)
npm ERR! code 1
我尝试过的事情:

  • 我开玩笑说,“--detectOpenHandles”,但它没有给我任何额外的信息
  • 没有app.listen(端口)(我有一个单独的server.js文件)
  • 我已将以下内容添加到package.json中:
package.json

"jest": {
  "testEnvironment": "node"
}

显然,当我调用
mongoose.disconnect()时,mongoose并没有建立连接
这会导致所有错误,因此我在代码中添加了以下内容:

beforeAll((done) => {
    if(!mongoose.connection.db){
        mongoose.connection.on('connected', done)
    } else {
        done();
    }
}, 20000);

detectOpenHandles不是要解决问题,而是要揭露原因。它没有给输出添加任何内容吗?目前还不清楚猫鼬是问题所在。你和它断开连接。其他相关的事情都被省略了。什么是
?如果有一个服务器侦听器,而您没有取消它的侦听,这显然是问题所在。
/users
中发生了什么?这个问题没有主题,我已经更新了帖子并添加了完整的错误消息。detectOpenHandles没有添加任何内容,没有服务器侦听器和/或用户只是发送一条成功消息。是的,错误表明这就是问题所在。在正常情况下不需要这样做,因为Mongoose为其余操作提供了连接承诺。这可能特定于Mongoose或Mongo版本。可能是个虫子。