渡槽和内存数据库

Aqueduct & in memory database

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

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

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

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

tl;dr 是您可以使用 PostgreSQL 的本地实例,其效率与内存数据库相同,并且 documentation on the one-time setup process

详情

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

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

CI TravisCI 和 Appveyor 等平台都支持本地 PostgreSQL 进程。有关示例,请参阅 this script and this travis config