场景 运行Jest对运行mongodb内存中实例的nodejs API进行单元测试(通过mongodb-memory-server)
我的目标 对于所有测试文件,内存数据库应仅启动一次。
为什么 虽然启动1个数据库PER FILE甚至都不是什么大问题(只要at运行很快),最重要的原因是该插件首先通过大量下载来获取mongo二进制文件(如果它们尚未在缓存中)。因此,只执行一次该操作而不是一次执行一次文件就很有意义,因为下载的行为完全相同(它将文件从Web上下载到一个文件夹中)。
问题
除了启动内存中的mongo外,我还需要模拟dbService.js
文件,以便依赖于该文件的每个文件都将使用模拟的版本(从而使用内存中的服务器)。因此,我无法真正使用Jest的globalSetup
选项,因为该文件中的jest
是undefined
。我什至不能使用setupFiles
,因为它们运行PER FILE并且它们是同步的,而根据mongodb connect的性质,我需要一个异步函数。我还尝试在每个通过公用实用程序模块的文件中使用beforeAll
,但是由于测试文件是并行运行的,所以即使实用程序模块每个文件也运行一次。
也 我想避免有1个唯一的测试文件。我知道这是一种解决方法,但我想知道是否有一个简单干净的解决方案。完美的方案是“先做某件事,然后并行进行测试”。不应该不难吗?
答案 0 :(得分:0)
我要做的是下载globalSetup
中的文件,然后在__mocks__
目录或setupFiles
中设置数据库和模拟模拟,以避免必须对其进行设置明确地在每次测试中。
最好使用__mocks__
目录,因为只有在您的代码最终需要该文件时才运行模拟程序,而不是在每个测试中运行。