шут и мангуст - шутка обнаружила открытые ручки - PullRequest
0 голосов
/ 04 июня 2018

Так что я использую jest для тестирования моего приложения node.js, и тесты заканчиваются нормально, но я получаю сообщение от jest об открытых дескрипторах.Есть идеи?

jest --detectOpenHandles

PASS src / libs / user / tests / user_model_test.js PASS src / тесты / app_test.js PASS src / libs / user / тесты / user_service_test.js

Наборы тестов: 3 пройдено, 3 всего тестов: 14 пройдено, 14 всего моментальных снимков: 0 общее время: 7.209s Запустил все тестовые наборы.

Jest обнаружил следующие 4 открытых дескриптора, которые могут помешать выходу Jest:

● PROMISE

  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 ]

0 голосов
/ 28 июня 2018

Кажется, что ваше соединение с mongoose остается открытым после теста, попробуйте выполнить одно из следующих действий:

  1. закрыть экземпляр сервера после теста.

    const server = require('./app'); //server instance    
    server.close(); //put in afterAll or afterEach depending on your test
    
  2. закройте соединение с базой данных после всех тестов.

    afterAll(()=>{ mongoose.connection.close();});
    
  3. оберните соединение мангуста с помощью async / await.

    async function(){
       await mongoose.connect(mongoDB);
    };
    

попробуйте один или комбинацию.Это мои решения, так как я не могу видеть ваш код.

0 голосов
/ 05 июня 2018

Это связано с функцией model.init, которая возвращает обещание.Быстрое исправление будет состоять в том, чтобы передать флаг skipInit при создании модели следующим образом:

const User = mongoose.model("users", userSchema, "users", true)

skipInit является четвертым параметром в этой функции

Но вв этом случае он не будет инициализировать индексы для вашей модели, поэтому лучше установить этот флаг в соответствии с process.env.NODE_ENV

const skipInit = process.env.NODE_ENV === "test" const User = mongoose.model("users", userSchema, "users", skipInit)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...