1

我正在使用 buildbox.io 设置自托管持续集成。我需要在我的测试数据库中创建表和列。

在我自己的计算机上,我一直在使用public $import = 'MyTable';每个夹具,$defaultdatabase.php. 它运行良好,因为我的开发数据库始终与最新的迁移保持同步。

此外,以另一种方式执行此操作似乎很痛苦,每次您对数据库进行更改时,您都必须手动使您的数据库字段定义在您的设备中保持最新。鉴于字段列表已经是最新的,这似乎特别多余app/Config/Schema/schema.php

在服务器上,使用public $import = 'MyTable';将不起作用。即使我确实想在运行测试时将暂存数据库设为我的 $default 配置,也不能依赖暂存数据库始终是最新的。

所以,我的问题是,我该怎么做?有没有办法告诉 Cake 使用其中的定义schema.php从夹具构建其测试数据库?或者是我在所有灯具中手动添加字段定义的唯一方法?(这似乎是一种巨大的痛苦!)

4

2 回答 2

1

我对fixtures 所做的只是更新一组包含测试数据的sql 语句。该文件类似于 schema_MD5HASH.sql。

当我的测试运行时,它会为我的应用程序获取 schema.php 文件的 sql 哈希,并使用它来运行关联的 schema_MD5HASH.sql。如果该文件不存在,则测试失败,然后记住构建我的固定装置只是一个额外的构建。

我一直在玩的其他东西是:

  • 用每个字段的额外数据注释模式 - 类似于field_type
  • 在夹具中加载模式文件并读取特定表
  • field_type根据Faker之类的库解析并生成假数据

这种方式有点奇怪,你必须小心模式转储不会覆盖你的注释,但它工作得很好。

于 2014-06-30T01:00:43.883 回答
0

好的,我有一个我很满意的解决方案,它需要对我的代码进行最少的更改。

对于 Buildbox CI 环境,我以前只使用一个数据库 - 测试数据库。我现在添加了另一个,所以我有一个测试和默认数据库(以及$test数据库$default配置)。

在 Buildbox 引导过程(它运行的地方bootstrap.sh- 一个位于您的 CI 服务器上的文件,在您的应用程序之外)我调用Console/cake schema create,它将从schema.php.

现在,我可以正常运行我的测试,它们将从默认数据库中复制表定义,正如我的$import设置所建议的那样。

因此,默认数据库从不包含任何数据 - 它仅存在以便可以从中创建schema.php,因此可用于在我的测试期间导入表定义。

这是我的 Buildbox bootstrap.sh 中的 Cake-sepcific 行:

echo -e "--- Installing plugins via composer"
buildbox-run "composer install"

echo -e "--- Setting up database"
buildbox-run "cp ./app/Config/database.buildbox.php ./app/Config/database.php"

# create the default database, so that we can use $import as a means of generating fixture data on the test database.
# say yes at all prompts: http://askubuntu.com/questions/338857/automatically-enter-input-in-command-line
buildbox-run "yes | ./app/Console/cake schema create"
于 2014-07-01T06:21:11.520 回答