我想知道是否将内存数据库用于测试环境而不是MySQL(必须用于开发/生产)是常见的做法。
如果有意义,我该如何设置?
我认为我可以创建config/test.json
,如他们的chat example所示,尽管我的app.js
仍然需要Knex。
我应该照做
const knex = (NODE_ENV !== 'test') ? require('./knex') : undefined;
,然后仅在knex !== undefined
时配置它?
如果这样做,我的所有模型都必须设置两次(一次用于Knex,一次用于没有它的测试)。
解决此问题的正确/标准方法是什么?
编辑:
如下所示,我使用其他模式进行测试。
这是通过在config/test.json
中声明不同的连接字符串来完成的。
此问题已解决,谢谢!
答案 0 :(得分:1)
如果通常将内存数据库用于测试环境,则代替
可悲的是,这是一种常见的做法,但不是特别好。当您使用其他数据库进行测试而将其他数据库用于生产时,您的测试实际上并不是在测试应用程序代码是否在实际数据库中正常工作。
其他负面影响还在于您不能使用任何这些数据库的特殊功能,但是代码必须使用该数据库功能的子集,这两个数据库都支持该功能。
我将使用所有受支持的真实数据库运行所有测试,以确保代码可以在每种目标设置上正常运行。
ps。有人告诉使用模拟来抽象数据库...这是另一种不好的做法。它们只在测试的一小部分起作用,但是通常情况下,您需要针对真实数据库运行测试以确保代码正确运行。重要的是,以一种可以快速截断旧数据并在其中填充新测试数据的方式来设置测试。