initDB в тестировании

Всё про тестирование в Yii 2.0
Ответить
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

initDB в тестировании

Сообщение Chelobaka »

Здравствуйте,

Есть у yii2 такой класс yii\test\InitDbFixture который Запускает скрипт @app/tests/fixtures/initdb.php

Как изменить путь к этому файлу, если мне нужно брать его из @common?
Где можно найти пример настройки этого файла? initdb.php ?

Мне нужно сделать так что бы командой yii fixture/load "*"

fixtures грузились в нужную БД. То есть тестовую.
Как добавить или изменить БД я не нашел, кроме примитивной замены конфига, Но нужно что бы фикстуры всегда грузились в тестовую БД.
Решил так, но это конечно ужас. Даже из параметра ничего достать нельзя, а если имя БД поменяется то переписывать все классы это бред.

Код: Выделить всё

class UserFixture extends ActiveFixture
{
    public $modelClass = 'common\models\User';
    public $dataFile = __DIR__ . '/tests/_data/user.php';
    public $db = 'test_db';
}

Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

Re: initDB в тестировании

Сообщение Chelobaka »

В общем путь к @app/tests/fixtures/initdb.php можно переопределить через наследование yii\test\InitDbFixture но как это сделать в конфиге, хз.

Код: Выделить всё

'controllerMap' => [
    'fixture' => [
        'class' => 'yii\console\controllers\FixtureController',
        'namespace' => 'myalias\some\custom\namespace',
        'globalFixtures' => [
            'some\name\space\Foo',
            'other\name\space\Bar'
        ],
    ],
]
Для правильного подключения к нужной БД сделал родительский класс прокладку от которого наследуются все слассыFixture. В нем один аттрибут $db.

Других способов я не нашел.

Конечно можно запускать загрузку через index-text командой yii_test но суть была в том что бы фикстуры всегда грузились в определенную БД т.к. ошибка запуска загрузки фикстур на продакшн велика. Это осталось решенным как написано выше.

Как это сделать в initDB или config я не нашел.
Ответить