首页 > 解决方案 > 我可以假设所有数据库都会返回一个承诺吗?

问题描述

我正在和我的一个朋友设计一组单元和集成测试,我们有一个疑问。我们知道答案,至少,什么更可能是真的。但是,我们想听听您的想法。

我们正在为 MongoDB 设计一个测试,我们希望在要求保存文档后收到一个 Promise。到目前为止,一切都很好。

如果我们改变数据库呢???我们可以确定所有数据库在查询时都会返回一个承诺吗?

我猜关于_id,它取决于数据库,我们使用MongoDB中的_id进行测试。

我们在 Jest 中使用以下测试

            create://this method do exist on service, however, at the moment of testing, it is empty, just a placeholder
              jest.fn().mockImplementation((cat: CreateCatDto) =>
                Promise.resolve({ _id: 'a uuid', ...cat })
              )

这个想法是设计不依赖于数据库的后端,但出于测试和开发的原因,我们正在使用 MongoDB 和 PostgreSQL。

标签: postgresqlmongodbunit-testingjavascript

解决方案


请记住,术语承诺并不作为所有数据库的概念存在,并且不可能为所有数据库的问题提供结论性答案。

话虽这么说,如果您的承诺是指插入新数据后的主键身份(一般数据库术语),那么答案是否定的,没有保证,即使在 PostgreSQL 上您也不能这样做。即使在 PostgreSQL 中,表也可能在没有这些约束的情况下存在。

否则,如果通过promise,您具体指的是过程或函数语言(如JavaScript )中的概念(正如您更新中的示例代码所示),那么是的,如果您的应用程序代码适当地使用异步调用,您应该始终收到一个promise 对象。

但这将与异步调用是什么无关,它是直接的数据库(也不管是什么数据库系统)、API 端点或另一段应用程序代码。此外,在这种情况下,您的问题(或任何后续问题)将更适合StackOverflow.com


推荐阅读