cakephp + phpunit + gitlab непрерывная интеграция - PullRequest
2 голосов
/ 30 сентября 2019

Я ищу помощь с моими тестами в cakephp + phpunit + gitlab-ci.

Я определил свои тесты / приборы следующим образом: public $import = ['model' => 'MyModel'];, чтобы избежать необходимости переопределять схему таблиц в приборе и иметь несинхронизированный / неправильный код.

Я понимаю, что он ищет живую базу данных и использует эту информацию для генерации таблиц в тестовой базе данных, но что делать, если нет живой базы данных?

I 'Я пытаюсь автоматизировать мое тестирование в среде gitlab / непрерывной интеграции, и там они предоставляют вам контейнер mysql с одним db для выполнения ваших тестов. Если у меня будет одна БД, я не смогу иметь и основное соединение, и базу данных тестирования, верно?

Я думал о том, чтобы создать create-db-for-tests.sql и импортировать этот скриптНО я понимаю, что запуск теста с помощью прибора приведет к удалению таблицы, поэтому мне нужно будет создавать ее снова и снова при каждом тесте.

Я не смог использовать службу gitlab mysql и установить mysql в контейнере тестирования. чтобы иметь 2 базы данных, как в dev, но мне нужно было бы также заполнить другую БД некоторым скриптом, и это то же самое, что и определение структуры БД в фикстурах.

Как я могу решить эту проблему?

Любая помощь будет с благодарностью.

1 Ответ

0 голосов
/ 04 октября 2019

Что-то вышло у меня из головы после того, как я прочитал ваш вопрос.

  1. Если у вас нет живой базы данных, возможно, есть две причины: у вас может быть промежуточная база данных или у вашего приложения нет базы данных.
  2. Согласно вашему второму вопросу, связанному с Если у меня есть одна БД , я бы сказал Нет. Потому что вы могли бы иметь два соединения.

например

 public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'foge',
    'prefix' => '',
    'encoding' => 'utf8mb4',
);

public $test = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => 'root',
    'database' => 'test_foge',
    'prefix' => '',
    'encoding' => 'utf8mb4',
);

При создании прибора вы в основном определите две вещи: как создается таблица (какие поля являются частью таблицы) и какие записи будут изначально заполнены в таблице.

Я думаю, вы можете заполнить свой сценарий этим. Потому что это команда mysql. Но, честно говоря, я не пробовал раньше.

mysql -u jenkins -pcakephp_jenkins -e 'DROP DATABASE IF EXISTS test_foge; CREATE DATABASE test_foge; CREATE TABLE users; CREATE Table posts';

И последнее, что вы можете заполнить данные, прежде чем запускать их, и я думаю, вы уже знали это.

class ArticleFixture extends CakeTestFixture {

    public $fields = array(
        'id' => array('type' => 'integer', 'key' => 'primary'),
        'title' => array('type' => 'string', 'length' => 255, 'null' => false),
        'body' => 'text',
        'published' => array('type' => 'integer', 'default' => '0', 'null' => false),
        'created' => 'datetime',
        'updated' => 'datetime'
    );

    public function init() {
        $this->records = array(
            array(
                'id' => 1,
                'title' => 'First Article',
                'body' => 'First Article Body',
                'published' => '1',
                'created' => date('Y-m-d H:i:s'),
                'updated' => date('Y-m-d H:i:s'),
            ),
        ); 
        parent::init();
     }
}

Как моя личная точка зрения,Хорошая идея - удалять и заново создавать базу данных перед каждой сборкой. Это защищает вас от цепных сбоев, когда одна сломанная сборка приводит к сбою других.

...