使用本地Mongo数据库的测试环境

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

这篇文章介绍了在使用Typescript和NestJS开发API时,如何设置测试环境并进行测试。作者使用了mongodb-memory-server和node-mongodb-fixtures来创建本地数据库并填充测试数据。然后,作者展示了如何使用beforeAll、beforeEach和afterAll来设置测试环境,并给出了服务和控制器的测试示例。这种方法避免了使用mock来测试功能,使得测试更接近生产环境的行为。

🔎

延伸解读

为何选择本地数据库而非Mock

文章指出,在测试NestJS API时,使用本地数据库配合虚拟数据可以避免使用mock来测试功能,从而使测试更接近生产环境的行为。这种方法尤其适合需要验证数据库交互的场景,例如创建、查询、更新和删除操作。通过mongodb-memory-server和node-mongodb-fixtures,开发者可以快速搭建一个带有测试数据的本地MongoDB实例,确保测试的真实性。

TestingDatabase类的关键作用

TestingDatabase类封装了启动本地数据库、加载测试数据以及断开连接的方法。它通过createServer创建内存中的MongoDB实例,connectAndLoadData方法连接数据库并加载fixtures文件夹中的虚拟数据,最后disconnect方法负责清理资源。这个类简化了测试环境的搭建,使得在beforeAll和afterAll中调用即可完成数据库的初始化和销毁。

测试生命周期钩子的应用

文章展示了如何使用Jest的beforeAll、beforeEach和afterAll来管理测试环境。beforeAll中启动数据库并加载数据,afterAll中关闭数据库连接,而beforeEach则用于在每个测试用例前重新创建NestJS测试模块,确保测试之间的隔离。这种结构保证了每个测试都在干净的环境中运行,同时复用同一个数据库实例以提高效率。

测试用例中的断言与数据清理

在服务和控制器的测试示例中,使用expect进行断言,验证返回的数据结构包含id、code、name等字段,并且日期格式符合特定模式。此外,测试完成后通过findOneAndDelete删除创建的数据,避免影响后续测试。这种模式确保了测试的独立性和可重复性,同时也展示了如何对API响应进行细致的验证。

❓

Q&A

如何在NestJS中设置测试环境?

可以使用mongodb-memory-server和node-mongodb-fixtures创建本地数据库并填充测试数据。

使用mongodb-memory-server的好处是什么?

使用mongodb-memory-server可以避免使用mock进行测试,使测试更接近生产环境的行为。

如何创建和加载测试数据?

可以创建TestingDatabase类,并使用connectAndLoadData方法加载定义在fixtures文件夹中的测试数据。

在测试中如何使用beforeAll和afterAll?

beforeAll用于在测试开始前设置环境,afterAll用于在测试结束后清理环境。

如何验证API返回的数据结构?

可以使用expect进行断言,验证返回的数据结构和内容是否符合预期。

如何定义测试用的虚拟数据?

可以在fixtures文件夹中定义虚拟数据文件,例如tasks.ts,包含测试所需的文档。

🏷️

标签

➡️

继续阅读