javascript - 使用 NeDB 进行测试,同时在 FeatherJS 应用程序中使用其他 DB
问题描述
我想知道在测试环境中使用内存数据库而不是 MySQL(必须用于开发/生产)是否是常见的做法。
如果有意义,我该如何设置?
我想我可以按照他们的聊天示例config/test.json
所示创建,但我仍然需要 Knex。app.js
我应该做些什么
const knex = (NODE_ENV !== 'test') ? require('./knex') : undefined;
然后仅在以下情况下配置它knex !== undefined
?
如果我这样做,我的所有模型都必须设置两次(一次用于 Knex,一次用于没有它的测试)。
解决这个问题的正确/标准方法是什么?
编辑:
如下所示,我使用不同的模式进行测试。这是通过在 中声明不同的连接字符串来完成的config/test.json
。
这个问题解决了,谢谢!
解决方案
如果在测试环境中使用内存数据库是常见的做法,那么
可悲的是,这是一种常见的做法,但不是特别好的做法。当您使用不同的数据库进行测试和其他数据库进行生产时,您的测试实际上并没有测试应用程序代码是否在真实数据库中工作。
其他负面影响也是您不能使用任何这些数据库的特殊功能,但代码必须使用数据库功能的子集,这两个数据库都支持。
我将使用所有受支持的真实数据库运行所有测试,以确保代码适用于每个目标设置。
附言。有人告诉使用模拟来抽象数据库......这是另一个不好的做法。它们适用于一小部分测试,但在一般情况下,您需要针对真实数据库运行测试以确保代码正常工作。重要的是以一种快速截断旧数据并填充新测试数据的方式来设置测试。
推荐阅读
- mongodb - MongoDB 分片集群中的文档计数错误
- google-app-engine - gcloud app deploy 无法灵活构建
- android - 将当前 ItemId 从 RecyclerAdapter 传递给不同的类
- linux - 最早的 Linux 内核,可以在现代硬件上运行
- excel - 矩阵中的索引匹配返回不存在的值
- javascript - 用字符串替换标签名称
- r - 如何按特定地点的受访者人数进行过滤?错误:FUN 中的错误(左、右):
- geometry - 凸约束和优化中的欧几里得距离
- php - 如何检测 pdf 链接并使用 php 替换为嵌入代码?
- css - PrimeNG 表,如何在表的右侧有一个冻结列?