2014-06-26 4 views
1

Я настраиваю непрерывную интеграцию с использованием buildbox.io. Мне нужно создать таблицы и столбцы в моей тестовой базе данных.Настройка тестовой базы CakePHP с помощью приложения/Config/Schema/schema.php

На моем собственном компьютере я использовал public $import = 'MyTable'; для каждого прибора, чтобы скопировать ограничения таблицы из подключения базы данных $default в database.php. Он работает хорошо, поскольку моя база данных разработки всегда обновляется с последними миграциями.

Кроме того, это кажется огромной болью, чтобы сделать это по-другому, где вам придется вручную обновлять определения полей базы данных в ваших светильниках каждый раз, когда вы вносите изменения в свою базу данных. Это кажется особенно излишним, учитывая, что список полей уже обновлен в app/Config/Schema/schema.php

На сервере использование public $import = 'MyTable'; не будет работать. Даже если бы я захотел сделать промежуточную базу данных моей конфигурацией $ default при выполнении тестов, на промежуточную базу данных нельзя рассчитывать на постоянную актуальность.

Итак, мой вопрос: как я могу это сделать? Есть ли способ сказать Cake использовать определения в schema.php для создания тестовой базы данных из светильников? Или это единственный способ для меня вручную добавить определения полей во все мои светильники? (что кажется огромной болью!)

ответ

0

ОК, у меня есть решение, которым я доволен, что требует минимальных изменений в моем коде.

Для среды Build CI я ранее использовал только одну базу данных - тестовую базу данных. Я добавил еще один, поэтому у меня есть тестовая база данных по умолчанию (вместе с конфигурациями базы данных $test и $default).

В процессе начальной загрузки Buildbox (где он работает bootstrap.sh - файл, который находится на сервере CI, вне вашего приложения) я называю Console/cake schema create, которая будет заполнять базу данных по умолчанию из schema.php.

Теперь я могу выполнить свои тесты как обычно, и они скопируют определения таблиц из базы данных по умолчанию, как рекомендует моя настройка $import.

Таким образом, база данных по умолчанию никогда не содержит данных - она ​​существует только для того, чтобы ее можно было создать из schema.php и поэтому можно использовать для импорта определений таблиц во время моих тестов.

Вот торт-sepcific линии в моем Buildbox bootstrap.sh:

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" 
1

Что я делаю для светильников - это просто обновить набор операторов sql, содержащих тестовые данные. Файл имеет нечто вроде schema_MD5HASH.sql.

Когда мои тесты выполняются, он получает хеш sql файла schema.php для моего приложения и использует его для запуска связанной схемы schema_MD5HASH.sql. Если файл не существует, тесты терпят неудачу, и тогда это всего лишь одна дополнительная сборка, чтобы не задумываться о создании моих светильников.

Что-то еще, что я играл с это:

  • аннотирования схемы с дополнительными данными для каждого поля - что-то похожее на field_type
  • загружающих файл схемы в приспособлении и чтения в конкретные таблицы
  • разборе field_type и порождающие ложные данные в соответствии с библиотекой как Faker

Этот путь что-то странное, и вы должны быть осторожны, что дамп схемы не отменяет ваши аннотации, но работает очень хорошо.

+0

Круто, это подход, который я не подумал. Я думаю, что я по-прежнему предпочитаю хранить данные своего прибора так, как он есть, и извлекать определения из schema.php. Я постараюсь, чтобы это произошло, а если нет, дайте те методы, о которых вы упомянули. Приветствие Хосе. –