【问题标题】:Mocha --watch tests result in database errorMocha --watch 测试导致数据库错误
【发布时间】:2019-01-20 10:48:32
【问题描述】:

我有一个运行 express 的 node.js (v10.8.0) 应用程序,并且正在使用 mocha/chai 对其进行测试。我希望 mocha 在每次有文件更改时运行测试。

我的数据库(postgres)在 db.js 中是这样初始化的:

const pg = require('pg-promise')();
const db = pg('postgres://localhost:5432/myapp');

class DB {
  createNewUser(data) {...

我的 package.json 文件如下所示:

  "scripts": {
    "test": "cross-env NODE_ENV=development mocha",
    "dev": "cross-env NODE_ENV=development nodemon --exec babel-node src/index.js"
  },

当我运行 npm test 时,我的测试通过了。但是如果我运行npm test -- --watch,它将运行第一个测试并通过,但在第一次更改时它将重新实例化数据库并产生以下错误:

WARNING: Creating a duplicate database object for the same connection.
    at Object.<anonymous> (/Path/to/my/code/src/db.js:4:12)
    at Module._compile (internal/modules/cjs/loader.js:689:30)

我能做些什么来解决这个问题?

【问题讨论】:

    标签: node.js automated-tests mocha.js pg-promise


    【解决方案1】:

    如果这个警告是在实际代码中产生的,你需要担心是的。但在您的测试中,这种情况是合成的,由创建多个 Database 对象引起,每个对象都包含完全相同的连接详细信息。

    以下是您的选择:

    • 确保在测试中不要多次创建Database
    • 通过在initialization options 中指定noWarnings: true 来告诉库不要抛出任何警告,即const pgp = require('pg-promise')({noWarnings: true})
    • 如果您的测试有效,请忽略它。

    另请参阅:Where should I initialize pg-promise

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 2015-09-30
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      相关资源
      最近更新 更多