我可以假设所有数据库都会返回一个承诺吗



我正在和我的一个朋友设计一组单元和集成测试,我们对此表示怀疑。我们知道答案,至少,什么更有可能是真的。不过,我们想听听你的想法。

我们正在为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。

请记住,promise一词并不是所有数据库都有的概念,也不可能为所有数据库提供结论性的答案。

也就是说,如果promise是指插入新数据后的主键标识(在一般数据库术语中(,那么答案是否定的,不能保证,即使在PostgreSQL上也不能保证你能做到这一点。即使在PostgreSQL中,表也有可能在没有约束的情况下存在

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

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

我可以假设所有数据库都返回promise吗?

否。如果不是所有的话,大多数数据库连线协议都是同步的,这意味着客户端会阻塞,直到得到响应。即使是公开某种RESTful API的数据库也是同步的,因为HTTP。

一些客户端驱动程序可能会通过返回JavaScrpt-Promises或JavaFutures之类的东西来封装这种同步逻辑并表现出异步行为,但这完全取决于您选择使用的驱动程序实现。

最新更新