首页 > 解决方案 > Mocha --watch 测试导致数据库错误

问题描述

我有一个运行 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.jsautomated-testsmocha.jspg-promise

解决方案


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

所以这里是你的选择:

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

另请参阅:我应该在哪里初始化 pg-promise


推荐阅读