如何测试依赖于数据库的服务器代码?

How to test server code that relies on a database?

我有一个 NodeJS/MongoDB 应用程序。有很多功能,我有一堆单元测试来专门测试一些功能的逻辑。

还有使用 Agenda(任务调度库)的代码,它本身需要 MongoDB 来持久化。 如何设置测试环境,以便同时测试单元测试和 Agenda/MongoDB 代码? 我应该 运行 在 Docker 环境中进行所有测试,还是将简单的单元测试与 Agenda/MongoDB 测试分开?

我建议编写不依赖于数据库的单元测试。在您的应用程序中模拟 data-access 层。我应该能够 npm run test 并且在没有外部依赖的情况下相当快地完成它。这不会测试每个变体或每个 real-world 场景或对象映射问题,但它会让您有理由相信事情 运行 正确,并且 运行 .

另外,您还应该进行依赖于 real-world 设置的集成测试。想象一下,您将应用程序及其数据库部署在容器中,可能在本地 Compose 设置中。您应该能够向您的应用程序发出请求、观察一些外部更改、发出另一个请求并查看持久化数据。测试本身对 Docker 没有特别的依赖,通常可以从容器外部启动。测试应针对您计划部署到生产环境的确切图像。

所以在这两种情况下,测试本身 运行 在 Docker 之外;对于单元测试,作为本地 pre-commit build-and-test 序列的一部分,对于集成测试,作为打包应用程序的客户端。您不需要为 运行 测试构建不同的图像,也不需要在图像中包含测试代码或库。