pgPromise как уничтожить все соединения с БД при завершении модульного теста Jest

#node.js #postgresql #pg-promise

#node.js #postgresql #pg-обещание

Вопрос:

В моем файле модульного теста Jest, который использует библиотеку pgPromise, я получаю эту ошибку:

Jest не вышел через секунду после завершения тестового запуска.

Я думаю, это должно быть из-за приведенного ниже кода, который у меня есть в моем app.ts

 import {db} from './shared/db';
...
let sco: any;
db.connect().then(function (obj: any) {
  sco = obj;
  obj.client.query('LISTEN "table_update"');
  obj.client.on('notification', function (data: any) {
      var result = JSON.parse(data.payload);
  log.info(result);
  globalEmitter.emit(
    eventTypes.Entity_Data_Changed, 
    result
}
catch(error) {
  log.error({ error }, 'Error happened');
})
.finally(() => {
// release the connection, if it was successful:
 if (sco) {
    sco.done();
 }
  

});;

Я использую тот же импорт в своем файле модульного теста.

БД поступает из

 const db = pgp(options);
  

В моем файле модульного теста у меня есть этот код в конце

 afterAll(async done => {
setImmediate(done); // jest address open handle with --detectOpenHandles
db.$pool.end();
pgp.end();});
  

Я попробовал pgp.end(), чтобы уничтожить все соединения, поскольку я подозреваю, что выражение db в файле app.ts не принадлежит пулу соединений, поскольку я где-то читал об этом раньше. Но все равно не повезло. здесь будет оценена любая помощь.

Комментарии:

1. Когда вы используете ручное подключение , вам нужно позвонить done в конце. Вы этого не показываете. Кроме того, нет смысла вызывать .$pool.end() , если вы вызываете pgp.end() сразу после, что завершает все пулы в процессе.

2. вы тестируете саму базу данных? если нет, рассмотрите возможность издевательства над базой данных.

3. @DanielA. Белый, да, на самом деле это итерационный тест

4. Not sure how I can use done in that situation — здесь нет ничего особенного. Когда ваш тест завершится, вызовите done выделенное соединение. Если не вызывать его, соединение зависает за пределами пула, потому что вы используете connect .

5. Спасибо @vitaly-t, поэтому я обновил свой код, как указано выше, и он сработал. Я думаю, это то, что вы имели в виду. пожалуйста, сообщите, если иначе. спасибо за ваше драгоценное время.