node.js - 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)
我能做些什么来解决这个问题?
解决方案
如果在实际代码中产生了这个警告,你需要担心是的。但是在您的测试中,这种情况是合成的,由创建多个数据库对象引起,每个对象都包含完全相同的连接详细信息。
所以这里是你的选择:
- 确保在测试中不要多次创建数据库
noWarnings: true
通过在初始化选项中指定,告诉库不要抛出任何警告,即const pgp = require('pg-promise')({noWarnings: true})
- 如果您的测试有效,请忽略它。
另请参阅:我应该在哪里初始化 pg-promise。
推荐阅读
- c# - 我可以将所有字符串默认为 C# 6.0 插值字符串连接吗?
- keras - 由于形状错误,Keras fit_generator() 无法正常工作
- regex - Nginx 正则表达式示例获取两个逗号之间的值
- memory-management - 如何调试/查找 cma 分配失败原因?
- excel - 在 Select Case 语句中使用值列表
- node.js - 如何使用node js实时更改内容?
- .net - 如何使用 Selenium Winium 在 WPF 中检查/查找元素以进行自动化测试
- django - Django DRF 将配置文件模型创建限制为经过身份验证的用户
- swift - Key-Value-Observing 闭包从不调用布尔属性
- javascript - 使用 document.getElementsByTagName 选择并更新列表中的选项