postgresql - 我可以假设所有数据库都会返回一个承诺吗?
问题描述
我正在和我的一个朋友设计一组单元和集成测试,我们有一个疑问。我们知道答案,至少,什么更可能是真的。但是,我们想听听您的想法。
我们正在为 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。
解决方案
请记住,术语承诺并不作为所有数据库的概念存在,并且不可能为所有数据库的问题提供结论性答案。
话虽这么说,如果您的承诺是指插入新数据后的主键或身份(一般数据库术语),那么答案是否定的,没有保证,即使在 PostgreSQL 上您也不能这样做。即使在 PostgreSQL 中,表也可能在没有这些约束的情况下存在。
否则,如果通过promise,您具体指的是过程或函数语言(如JavaScript )中的概念(正如您更新中的示例代码所示),那么是的,如果您的应用程序代码适当地使用异步调用,您应该始终收到一个promise 对象。
但这将与异步调用是什么无关,它是直接的数据库(也不管是什么数据库系统)、API 端点或另一段应用程序代码。此外,在这种情况下,您的问题(或任何后续问题)将更适合StackOverflow.com。
推荐阅读
- octobercms - OctoberCMS - 图形记录作为跟踪模型中的数据
- verilog - Verilog - 如何从测试台模块中的输出寄存器插入值?
- flutter - 如何在颤振中调用状态类中的方法?
- javascript - 如何在 ionic 3 中禁用 iframe 的滚动
- java - 覆盖并附加到现有文件中
- laravel - 循环遍历 laravel 中的集合并从集合中获取特定数据
- android - 如何检查 kotlin 属性是否在 android lint 中是私有的?
- javascript - TypescRipt 错误无法将道具传递给组件 ReactJS
- python-3.x - 如何使用 Flask 在请求处理线程中启动另一个线程?
- reactjs - 使用 react js 创建嵌套表单