Jest:全局设置异步,可以访问 jest 以进行模拟

Jest: global setup async with access to jest for mocking purposes

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

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

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

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

还有 我想避免拥有 1 个唯一的测试文件。我知道这是一个解决方法,但我想知道是否有一个简单干净的解决方案。完美的场景是"Do something first asynch, then do the tests in parallel"。不应该那么难吗?

我要做的是在 globalSetup 中下载文件,然后在 __mocks__ 目录或 setupFiles 中设置你的数据库和 mock mock 以避免必须设置在每次测试中都明确指出。

__mocks__ 目录更可取,因为当您的代码最终需要该文件而不是在每个测试中都需要该文件时,模拟才会 运行。