Данные от нескольких фикстур в одной таблице

Всё про тестирование в Yii 2.0
Ответить
Аватара пользователя
maleks
Сообщения: 1631
Зарегистрирован: 2012.12.26, 12:56

Данные от нескольких фикстур в одной таблице

Сообщение maleks » 2018.08.08, 07:38

Приветствую.
Интересует насколько концептуально правильным(или нет) будет наполнение таблицы БД данными из нескольких фикстур.
Например код:

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

    public function testTwoFixtures()
    {
        $I = $this->tester;
        $I->haveFixtures([
            'mouse' => [
                'class' => AnimalFixture::class,
                'dataFile' => codecept_data_dir() . 'animal/only_mouse.php'
            ],
            'cat' => [
                'class' => AnimalFixture::class,
                'dataFile' => codecept_data_dir() . 'animal/only_cat.php'
            ],            
        ]);
    }  
Код этот правда работать не будет, из-за особенности реализации фреймворка, но если использовать разные классы фикстур, то они вставят в одну таблицу каждая свои данные.
Вроде как бы удобно, но верно ли так делать?
Ведь в теории о фикстурах так сказано:
What is a Fixture?

A fixture describes the initial state your application and database are in when you execute a test.
Т.е. каждая фикстура подразумевает полное соответствие ее и содержания БД.
И вот раз мы применяем фикстуру 'mouse', которая содержит только одну строку, соотв. и в этой таблице не должно быть ничего другого.

Аватара пользователя
yiijeka
Сообщения: 3031
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь

Re: Данные от нескольких фикстур в одной таблице

Сообщение yiijeka » 2018.08.08, 08:18

> но если использовать разные классы фикстур, то они вставят в одну таблицу каждая свои данные.
Таблица же очищается перед вставкой данных. Вторая фикстура затрёт данные первой.

Аватара пользователя
maleks
Сообщения: 1631
Зарегистрирован: 2012.12.26, 12:56

Re: Данные от нескольких фикстур в одной таблице

Сообщение maleks » 2018.08.08, 08:27

yiijeka писал(а):
2018.08.08, 08:18
Таблица же очищается перед вставкой данных. Вторая фикстура затрёт данные первой.
Очищаются между разными вызовами Yii2::haveFixtures.
А внутри каждой:
Сначала очищаются все фикстуры (их таблицы)
А потом все вставляются

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

    public function haveFixtures($fixtures)
    {
        if (empty($fixtures)) {
            return;
        }
        $fixturesStore = new Yii2Connector\FixturesStore($fixtures);
        
        $fixturesStore->unloadFixtures();
        $fixturesStore->loadFixtures();
        $this->loadedFixtures[] = $fixturesStore;
    }

Аватара пользователя
yiijeka
Сообщения: 3031
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь

Re: Данные от нескольких фикстур в одной таблице

Сообщение yiijeka » 2018.08.08, 08:51

Тогда ничего страшного не вижу. Наверное дальше будет только удобнее работать с grabFixture('mouse', 'black') ... grabFixture('cat', 'black')

Ответить