开玩笑:全局设置异步访问开玩笑用于模拟目的

时间:2018-09-05 09:32:20

标签: node.js mongodb unit-testing jestjs in-memory-database

场景 运行Jest对运行mongodb内存中实例的nodejs API进行单元测试(通过mongodb-memory-server

我的目标 对于所有测试文件,内存数据库应仅启动一次。

为什么 虽然启动1个数据库PER FILE甚至都不是什么大问题(只要at运行很快),最重要的原因是该插件首先通过大量下载来获取mongo二进制文件(如果它们尚未在缓存中)。因此,只执行一次该操作而不是一次执行一次文件就很有意义,因为下载的行为完全相同(它将文件从Web上下载到一个文件夹中)。

问题 除了启动内存中的mongo外,我还需要模拟dbService.js文件,以便依赖于该文件的每个文件都将使用模拟的版本(从而使用内存中的服务器)。因此,我无法真正使用Jest的globalSetup选项,因为该文件中的jestundefined。我什至不能使用setupFiles,因为它们运行PER FILE并且它们是同步的,而根据mongodb connect的性质,我需要一个异步函数。我还尝试在每个通过公用实用程序模块的文件中使用beforeAll,但是由于测试文件是并行运行的,所以即使实用程序模块每个文件也运行一次。

我想避免有1个唯一的测试文件。我知道这是一种解决方法,但我想知道是否有一个简单干净的解决方案。完美的方案是“先做某件事,然后并行进行测试”。不应该不难吗?

1 个答案:

答案 0 :(得分:0)

我要做的是下载globalSetup中的文件,然后在__mocks__目录或setupFiles中设置数据库和模拟模拟,以避免必须对其进行设置明确地在每次测试中。

最好使用__mocks__目录,因为只有在您的代码最终需要该文件时才运行模拟程序,而不是在每个测试中运行。