我正在使用buildbox.io设置自托管持续集成。我需要在测试数据库中创建表和列。
在我自己的计算机上,我一直在使用public $import = 'MyTable';
用于每个装置,从$default
中的database.php
数据库连接复制表格防御。它运行良好,因为我的开发数据库始终是最新的迁移。
另外,以另一种方式执行此操作似乎是一件非常痛苦的事情,每当您对数据库进行更改时,您必须手动将数据库字段定义保持在灯具中。考虑到app/Config/Schema/schema.php
在服务器上,使用public $import = 'MyTable';
无法正常工作。即使我确实想在运行测试时使登台数据库成为我的默认配置,也不能依赖登台数据库随时更新。
所以,我的问题是,我该怎么做?有没有办法告诉Cake使用schema.php
中的定义来从fixture中构建测试数据库?或者是我在所有灯具中手动添加字段定义的唯一方法? (这似乎是一个巨大的痛苦!)
答案 0 :(得分:1)
我为灯具做的只是更新一组包含测试数据的sql语句。该文件类似于schema_MD5HASH.sql。
当我的测试运行时,它会获取我的应用程序的schema.php文件的sql哈希,并使用它来运行关联的schema_MD5HASH.sql。如果文件不存在,则测试失败,然后只需要一个额外的版本来记住构建我的灯具。
我一直在玩的其他东西是:
field_type
field_type
并根据Faker 这种方式有点奇怪,你必须要小心,架构转储不会覆盖你的注释,但它的工作方式还可以。
答案 1 :(得分:0)
好的,我已经找到了一个我很满意的解决方案,这需要对我的代码进行最少的更改。
对于Buildbox CI环境,我以前只使用一个数据库 - 测试数据库。我现在添加了另一个,所以我有一个测试和默认数据库(以及$test
和$default
数据库配置)。
在Buildbox引导过程中(运行bootstrap.sh
- 位于CI服务器上的文件,在应用程序外)我调用Console/cake schema create
,这将填充{{1}的默认数据库}。
现在,我可以正常运行我的测试,他们将从默认数据库中复制表定义,我的schema.php
设置建议。
因此,默认数据库永远不会包含任何数据 - 它只存在,因此可以从$import
创建,因此可以在我的测试中用于导入表定义。
这是我的Buildbox bootstrap.sh中的Cake-sepcific行:
schema.php