只是想知道Aqueduct ORM是否支持简单的内存数据库,以进行测试。在将后端实际连接到postgres之前,需要寻找易于编写且轻巧的后端。
答案 0 :(得分:2)
我在H2和Java中使用了类似的方法,但是在Java中却很容易出错:尽管SQL接口可能相似,但是您可能会使用一种功能,而另一种功能则不可用。最终,要么您的开发被阻止,要么没问题,但是随后的实际部署将遇到问题。
我发现在docker中启动Postgresql实例比我最初想象的要容易得多,现在我对大多数外部依赖项使用相同的原理:在docker中运行它们。如果有兴趣,我可以将Dart软件包开源,该软件包将启动docker容器,并等待直到输出中出现某个字符串模式(例如,有关成功启动的报告)。
答案 1 :(得分:1)
Aqueduct旨在与本地运行的PostgreSQL实例进行测试。这样可以避免在测试与部署中使用其他数据库引擎时发生的错误类别。这是渡槽的一个非常重要的功能。
tl; dr是您可以以与内存数据库相同的效率使用PostgreSQL的本地实例,并且有documentation on the one-time setup process。
Aqueduct在启动时通过反思您的应用程序代码来创建数据模型的中间表示。该表示驱动数据库迁移,序列化,运行时反映,甚至可以导出为JSON以在Aqueduct之上创建数据建模工具。
在每个测试套件的开始,您的测试工具使用此表示法在名为dart_test
的本地数据库中生成临时表。一旦数据库连接丢失,临时表将被销毁;您可以根据需要将其配置为在测试,测试组或整个测试套件之间进行。事实证明,这非常快-毫秒级。
诸如TravisCI和Appveyor的CI平台均支持本地PostgreSQL进程。有关示例,请参见this script和this travis config。