Palych_tw
@Palych_tw
Типа веб-разработчик

Как создать независимую миграцию для тестовой базы в YII2?

Собственно вопрос. Как для базы для тестов создать свою миграцию, что бы, когда запускаешь
yii migarte
и
tests\bin\yii migrate
можно было применить две разные миграции. Я так полагаю, можно же где-то указать путь к папке с миграциями для двух разных консольных приложений?
  • Вопрос задан
  • 478 просмотров
Решения вопроса 2
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Путь к файлу миграции можно указать так
yii migrate --migrationPath=@app/modules/forum/migrations --interactive=0

Для тестов лучше использовать другую базу данных.
Вот тут рассмотрен этот вопрос, хотя это не единственное решение.

P.S
Ещё две статьи по тестированию, рассматривается конфигурация тестов
раз(статья)
два(вебинар)

P.S.
Вот пример фикстуры, для заполнения тестовой базы на примере basic.
Создаёте директорию fixtures, в ней класс
namespace app\fixtures;

use yii\test\ActiveFixture;

class AirportFixture extends ActiveFixture
{
    public $modelClass = 'app\modules\airlines\models\Airport'; // модель, с которой будет работать фикстура
    public $dataFile = '@app/fixtures/data/airport.php'; // путь к директории с фикстурой, располагаете в fixtures
}

Содержимое фикстуры
return [
    ['airport_ru'=>'Аэропорт 1','airport_en'=>'Airport 1','iata_airport'=>'AR1','country_id'=>8,'city_id'=>8,'created_at'=>time(),'updated_at'=>time()],
    ['airport_ru'=>'Аэропорт 2','airport_en'=>'Airport 2','iata_airport'=>'AR2','country_id'=>9,'city_id'=>9,'created_at'=>time(),'updated_at'=>time()],
    ['airport_ru'=>'Аэропорт 3','airport_en'=>'Airport 3','iata_airport'=>'AR3','country_id'=>10,'city_id'=>10,'created_at'=>time(),'updated_at'=>time()],
    ['airport_ru'=>'Аэропорт 4','airport_en'=>'Airport 4','iata_airport'=>'AR4','country_id'=>11,'city_id'=>11,'created_at'=>time(),'updated_at'=>time()],
    ['airport_ru'=>'Аэропорт 5','airport_en'=>'Airport 5','iata_airport'=>'AR5','country_id'=>12,'city_id'=>12,'created_at'=>time(),'updated_at'=>time()],
    ['airport_ru'=>'Аэропорт 6','airport_en'=>'Airport 6','iata_airport'=>'AR6','country_id'=>13,'city_id'=>13,'created_at'=>time(),'updated_at'=>time()],
    ['airport_ru'=>'Аэропорт 7','airport_en'=>'Airport 7','iata_airport'=>'AR7','country_id'=>14,'city_id'=>14,'created_at'=>time(),'updated_at'=>time()],
];

В консоли из директории приложения выполняете команду
php yii --help fixture
получаете список команд и выполняете
#load fixtures with different namespace.
yii fixture/load User --namespace=alias\my\custom\namespace\goes\here

Вот и загружаются Ваши фикстуры
Ответ написан
padlyuck
@padlyuck
А зачем вам отдельные миграции для тестов? почему не сделать одни и те же миграции(структура таблиц + системные данные), а всякие пользовательские данные грузите для тестов фикстурами
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы