摩卡--watch测试导致数据库错误

时间:2018-08-13 16:34:14

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

我有一个运行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)

该如何解决?

1 个答案:

答案 0 :(得分:0)

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

所以这是您的选择:

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

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

相关问题