1

只是想知道,Aqueduct ORM 是否支持简单的内存数据库,用于测试目的。在将后端实际连接到 postgres 之前,寻找一些简单轻量级的东西来编写后端。

4

2 回答 2

2

我在 H2 和 Postgres 中使用了类似的方法和 Java,但它很容易出错:虽然 SQL 接口可能相似,但您可能使用的是其中一个可用的功能,而另一个则没有。最终,要么你的开发被阻止,要么没问题,但是真正的部署会遇到问题。

我发现在 docker 中启动 Postgresql 实例比我最初想象的要容易得多,现在我对大多数外部依赖项使用相同的原则:在 docker 中运行它们。如果有兴趣,我可以开源一个 Dart 包,它启动 docker 容器并等待输出中出现特定的字符串模式(例如成功启动的报告)。

于 2018-06-28T17:05:52.247 回答
1

Aqueduct 的构建是为了使用本地运行的 PostgreSQL 实例进行测试。这避免了在测试和部署中使用不同的数据库引擎时发生的错误类别。这是渡槽的一个非常重要的特征。

tl;dr 是您可以使用 PostgreSQL 的本地实例,其效率与内存数据库相同,并且有关于一次性设置过程的文档

细节

Aqueduct 在启动时通过反映您的应用程序代码来创建数据模型的中间表示。这种表示驱动数据库迁移、序列化、运行时反射,甚至可以导出为 JSON 以在 Aqueduct 之上创建数据建模工具。

在每个测试套件开始时,您的测试工具使用这种表示形式在名为 的本地数据库中生成临时dart_test表。一旦数据库连接丢失,临时表就会被销毁;您可以根据需要将其配置为在测试、测试组或整个测试套件之间发生。事实证明,这是非常快的——大约毫秒。

TravisCI 和 Appveyor 等 CI 平台都支持本地 PostgreSQL 进程。有关示例,请参阅此脚本此 travis 配置。

于 2018-06-28T19:16:00.357 回答