首页 > 解决方案 > 使用 knex 和 mocha 永远运行测试

问题描述

所以我使用带有 Node 的 Knex 模块来连接我的数据库,这很棒,可以满足我的一切需求。

但是,当我在 mocha 中运行单元测试时,即使单元测试完成,该过程也会继续运行。

所以我看到其他人有类似的问题,它永远运行,他们的解决方案是使用 knex.destroy()。我试过这个,它适用于一个文件,但我运行我的单元测试,比如 npm run test* 它将运行任何文件。所以一旦第一个测试运行破坏,以下测试都会失败。

我只是想知道这是否是一个仍在运行的未解决承诺的案例?还是配置错误的knex?

我像这样配置knex..

'use strict';
const
    config = require('../../config/config');

module.exports = require('knex')({
    client: 'mysql',
    connection: {
        host: config.get('db.host'),
        user: config.get('db.user'),
        password: config.get('db.password'),
        database: config.get('db.database'),
        multipleStatements: true
    },
    pool: {
        min: 0,
        max: 5,
    // debug: true
});

当我需要一个数据库项目时,我只需用 db.insert( ... ) 等调用它。

我不需要获取 Knex 的实例感觉有点不对劲?

希望有人能给我一些指示吗?

提前致谢。授予

标签: unit-testingmocha.jsforever

解决方案


我对 knex 0.15.2、 pg7.4.3和 mocha有同样的问题5.2.0knex.destroy()在每种测试方法之后按照推荐的方法解决它:

let knex: Knex
beforeEach(async () => {
  knex = Knex({
    client: 'pg',
    connection: config.postgres.connection_string,
    debug: config.postgres.debug,
    acquireConnectionTimeout: config.postgres.connection_timeout
  })
})    
afterEach(async () => {
  await knex.destroy()
})

推荐阅读