Не могу разобраться как загружать фикстуры

Всё про тестирование в Yii 2.0
Ответить
voodooism
Сообщения: 48
Зарегистрирован: 2018.11.12, 10:29

Не могу разобраться как загружать фикстуры

Сообщение voodooism » 2018.11.22, 10:42

Пытаюсь въехать в тетсирование, и никак не могу разобраться с загрузкой фикстур.

Информация о моём окружении:

**Codeception version is 2.5.1**
**DBMS is Oracle**
**Application framework is Yii2**

Миграция для создания таблицы.

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

    private $tableName = 'fixture_test';
    
    public function up()
    {
        $this->createTable($this->tableName, [
            'ID_FIXTURE' => $this->primaryKey()->autoIncrement(),
            'TEST_DATA1' => $this->string('200 CHAR')->comment('Test data 1'),
            'TEST_DATA2' => $this->string('200 CHAR')->comment('Test data 2'),
            'TEST_DATA3' => $this->string('200 CHAR')->comment('Test data 3'),
            'TEST_DATA4' => $this->integer()->comment('Test data 4'),
        ]);
    }
Тестируемая модель:

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

namespace app\models;  
    
    class FixtModel extends \yii\db\ActiveRecord
    {
        public static function tableName()
        {
            return 'FIXTURE_TEST';
        }
    
        public function rules()
        {
            return [
                [['ID_FIXTURE'], 'required'],
                [['ID_FIXTURE', 'TEST_DATA4'], 'integer'],
                [['TEST_DATA1', 'TEST_DATA2', 'TEST_DATA3'], 'string', 'max' => 200],
                [['ID_FIXTURE'], 'unique'],
            ];
        }
    }  
Данные для фикстуры:
Лежат здесь: tests/fixtures/data/test.php

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

<?php
    
    return [
        'test1' => [
            'TEST_DATA1' => 'asdfg',
            'TEST_DATA2' => 'asdfg',
            'TEST_DATA3' => 'asdfg',
            'TEST_DATA4' => 1,
        ],
    ];
Модель фикстуры:

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

<?php
    
    namespace app\tests\fixtures;
    
    class TestFixture extends ActiveFixture
    {
        public $modelClass = 'app\models\FixtModel';
        public $dataFile = __DIR__ . '../fixtures/data/test.php';
    }

И наконец то сам класс юнит-теста

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

 class FixtureTest extends \Codeception\Test\Unit
    {
        /**
         * @var \UnitTester
         */
        protected $tester;
    
        public function _fixtures() {
            return [
                'test'   => 'app\tests\fixtures\TestFixture',
            ];
        }
        
        protected function _before()
        {
        }
    
        protected function _after()
        {
        }
    
        public function testSomeFeature()
        {
            $this->tester->grabFixture('test', 'test1');
        }
    }
Я запускаю его следующим образом : ./vendor/bin/codecept run tests/unit/FixtureTest.php и получаю следующую ошибку:

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

  Test  tests/unit/FixtureTest.php:testSomeFeature
                                                                                     
      [yii\base\ErrorException] array_merge() expects at least 1 parameter, 0 given  
                                                                                     
    #1  /var/www/ozon/tests/_support/_generated/UnitTesterActions.php:692
    #2  /var/www/ozon/tests/unit/FixtureTest.php:26
    #3  /var/www/ozon/vendor/symfony/console/Application.php:262
    #4  /var/www/ozon/vendor/symfony/console/Application.php:145
Что я делаю нерпавильно? Уже кучу информации пересмотрел, и никак не могу понять :(

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

Re: Не могу разобраться как загружать фикстуры

Сообщение maleks » 2018.11.22, 11:46

А если метод _fixtures сделать как в доках, заработает?

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

    public function _fixtures()
    {
        return [
            'profiles' => [
                'class' => UserProfileFixture::className(),
                // fixture data located in tests/_data/user.php
                'dataFile' => codecept_data_dir() . 'user.php'
            ],
        ];
    }

voodooism
Сообщения: 48
Зарегистрирован: 2018.11.12, 10:29

Re: Не могу разобраться как загружать фикстуры

Сообщение voodooism » 2018.11.22, 13:16

Потратил кучу времени, но разобрался. Была ошибка в настройке окружения.

Но возник еще один вопрос, и пожалуй задам его прямо здесь (дабы не плодить кучу тем, ибо вопросов у меня будет еще много :) ).

Фикстуры теперь успешно создаются в базе данных, но по заврешению тестов база даных не очищается. В классе yii\test\ActiveFixture в методе unload() вызывается метод $this->resetTable(), и как я понимаю он должен очистить базу данных по завершению теста. Но такое почему то не происходит, и по заврешению всех тестов база остается наполненная тестовыми данными. Так и должно быть, или я что то не понимаю?

Аватара пользователя
ElisDN
Сообщения: 5428
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Не могу разобраться как загружать фикстуры

Сообщение ElisDN » 2018.11.22, 13:35

Ну пусть остаются. Никому же не мешают.

voodooism
Сообщения: 48
Зарегистрирован: 2018.11.12, 10:29

Re: Не могу разобраться как загружать фикстуры

Сообщение voodooism » 2018.11.22, 14:41

ElisDN писал(а):
2018.11.22, 13:35
Ну пусть остаются. Никому же не мешают.
Согласен, не мешают. Просто вопрос в том, как именно это должно работать и от чего это зависит :)
Буду благодарен если объясните!

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

Re: Не могу разобраться как загружать фикстуры

Сообщение maleks » 2018.11.22, 15:00

Глобальный - codeception.yml

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

modules:
    config:
        Yii2:
            configFile: 'config/test.php'
            cleanup: true     //  Очищать ли фикстуры после каждого теста. По умолчанию true

Ответить