在knex中的排水连接比预期花费更多的时间

时间:2017-10-04 18:50:12

标签: javascript node.js mocha knex.js

我正在使用knex池进行mocha测试。

我遇到的问题是测试结束时,它会一直等到knex池耗尽,并且需要额外的秒数(约5-10)来完成mocha运行。

代码示例:

knex初始化:

const Knex = require('knex');
const knex = new Knex({
  client: 'pg',
  pool: { min: 1, max: 10 },
  connection: {},
  searchPath: 'knex,public',
  // debug: true,
});

摩卡测试排水连接:

  after((done) => {
    knex.destroy().then(done);
  })

我想要完成的任务是:

  1. 快速排空knex连接
  2. 以某种方式摩卡完成测试而不等待knex排水
  3. 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

此功能在mocha之前发生了变化

  

2879:默认情况下,一旦所有测试完成,Mocha将不再强制进程退出。这意味着任何测试代码(或测试中的代码)

     通常会阻止节点退出的

在运行时会这样做   摩卡。提供--exit标志以恢复到v4.0.0之前的行为   (@ScottFreeCode,@ boneskull)

https://github.com/mochajs/mocha/blob/master/CHANGELOG.md

如果上述方法没有帮助,您可以随时调用process.exit(0)来强制终止,并使用成功退出代码。

在knex方面的AFAIK没有用于强制终止连接的强制选项。

答案 1 :(得分:0)

这将帮助您避免连接中断。

const config = {
    client: "pg",
    connection: {
      host: hostname,
      user: username,
      password: password,
      database: datbase
    },
    pool: {
      min: 0,
      max: 10
    },
    acquireConnectionTimeout: 1000
  }
  var Knex = require('knex')

  this.functioname = () => {
    var output = {}
    return new Promise(function (resolve) {
      var knex = new Knex(config)
      knex(tablename)
        .select()
        .then((result) => {
          if (result.length > 0) {
            output.error = false
            output.result = result
          } else {
            output.error = true
          }
          resolve(output)
        })
        .catch((err) => {
          err.error = true
          resolve(err)
        })
        .finally(() => {
          knex.destroy()
        })
    })
  }