Jest:全局设置异步,可以访问用于模拟目的的jest

问题描述 投票:0回答:1

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

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

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

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

另外,我想避免拥有一个独特的测试文件。我知道这是一个解决方法,但我想知道是否有一个简单而干净的解决方案。完美的场景是“先做一些异步,然后并行进行测试”。难道不应该那么难吗?

node.js mongodb unit-testing jestjs in-memory-database
1个回答
0
投票

我要做的是在globalSetup中下载文件,然后在__mocks__目录或setupFiles中设置db和mock mock,以避免在每次测试中明确设置它。

__mocks__目录是首选,因为只有当您的代码最终需要该文件而不是每个单独的测试时,才会运行模拟。

© www.soinside.com 2019 - 2024. All rights reserved.