Загрузка fixture один раз для всего теста

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

Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.09.24, 10:17

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

У меня есть формы в которых есть валидации по существования записи в таблице.
Как загружать фикстуры для класса теста единожды?

То есть 1 раз заполнить таблицы и потом пройти все тесты в одном классе, после таблицы уже сами очистятся. Сейчас загрузка всех фикстур в методе _before и как следаствие грузятся при каждом тесте.


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

Re: Загрузка fixture один раз для всего теста

Сообщение maleks » 2019.09.24, 14:30

Попробуйте указать haveFixtures() в setUpBeforeClass() , при этом в классе теста не использовать _fixtures() (или у вас в _before()?) чтобы оно не переопределило

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

Re: Загрузка fixture один раз для всего теста

Сообщение maleks » 2019.09.24, 15:43

хотя я б так не делал.
Тест есть тест и под него каждый раз должна гарантированно установиться фикстура.
А не надежда что мол раз только читаем, то давай секономим.
Все это будет запутывать кому придется с таким кодом возможно дальше работать.
Во внутряках копаться никому неохота, вон вы как долго с тестами возитесь, и все что то не получается, а если это еще и поверх запутать...

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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.09.24, 17:55

maleks писал(а):
2019.09.24, 15:43
хотя я б так не делал.
Тест есть тест и под него каждый раз должна гарантированно установиться фикстура.
А не надежда что мол раз только читаем, то давай секономим.
Все это будет запутывать кому придется с таким кодом возможно дальше работать.
Во внутряках копаться никому неохота, вон вы как долго с тестами возитесь, и все что то не получается, а если это еще и поверх запутать...
Так то оно так но у меня один класс 30 сек. тестируется. 10 таблиц заполняется и только для чтения. Так что без вариантов. Ну а кто будет после увидит что тест провален, полезет в него и поймет что да как.

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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.09.24, 17:58

maleks писал(а):
2019.09.24, 14:30
Попробуйте указать haveFixtures() в setUpBeforeClass() , при этом в классе теста не использовать _fixtures() (или у вас в _before()?) чтобы оно не переопределило
Не находит такой метод. Тут тоже codeception.com

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

Re: Загрузка fixture один раз для всего теста

Сообщение maleks » 2019.09.25, 07:52

Chelobaka писал(а):
2019.09.24, 17:58
Не находит такой метод. Тут тоже codeception.com
Юнит тесты Codeception основаны на PHPUnit

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

namespace Codeception\Test;
class Unit extends \PHPUnit\Framework\TestCase
Тут посмотрите Пример 4.2

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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.09.25, 11:50

maleks писал(а):
2019.09.25, 07:52
Chelobaka писал(а):
2019.09.24, 17:58
Не находит такой метод. Тут тоже codeception.com
Юнит тесты Codeception основаны на PHPUnit

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

namespace Codeception\Test;
class Unit extends \PHPUnit\Framework\TestCase
Тут посмотрите Пример 4.2
Проблема в том была что метод статический.
А фикстуры я гружу так:

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

$this->tester->haveFixtures([
            'user' => [
            ....
            
Получается что не могу это сделать внутри метода.

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

Re: Загрузка fixture один раз для всего теста

Сообщение maleks » 2019.09.25, 13:44

А так, по хакерски, не получится?

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

$test = new self;
$module = $test->getModule('Yii2');
$module->haveFixtures(...
Я в кишках Codeception не так много рылся и не вчера, так что это так, наугад.

Лучше бы вы подумали почему ваши фикстуры так долго грузятся.
Много данных?
Может индексы убрать?

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

Re: Загрузка fixture один раз для всего теста

Сообщение maleks » 2019.09.25, 14:32

Или например можете фикстуру подключить только в первом тесте и выставить cleanup в false

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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.09.25, 17:40

maleks писал(а):
2019.09.25, 13:44
А так, по хакерски, не получится?

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

$test = new self;
$module = $test->getModule('Yii2');
$module->haveFixtures(...
Я в кишках Codeception не так много рылся и не вчера, так что это так, наугад.

Лучше бы вы подумали почему ваши фикстуры так долго грузятся.
Много данных?
Может индексы убрать?
Таблица Валют и Стран с языками. По 3 на каждый. Много букав короче.

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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.09.25, 18:35

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

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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.09.26, 13:59

Господа знатоки подскажите пожалуйста. Как все таки инициировать загрузку fixture единожды для класса тестов. Спасибо.


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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.10.02, 14:31

Leffken писал(а):
2019.09.30, 17:33
Глобальные фикстуры
Класс теста наследуется от extends \Codeception\Test\Unit. В нём нет метода globalFixtures. Данный метод есть только в yii\test\FixtureTrait; но подключение этого трейта желаемого результата не дало, метод не вызывается.

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

Re: Загрузка fixture один раз для всего теста

Сообщение Chelobaka » 2019.10.02, 17:00

Попробовал уже и схитрить. Вызывать создание фикстур через метод и в нем проверять по переменной были они загружены или нет. Насколько я понял из того что переменная всегда возвращается к дефолтному значение клас каждый раз перегружается и это не сработает.

Как использовать фикстуры в статическом методе setUpBeforeClass я так и не понял. Пробовал создавать метод внутри для доступа к haveFixtures так возвращал ошибку Yii2: Module can't be accessed

$test = new Unit(); или $test = new self;
Тут ошибка $module = $test->getModule('Yii2');

В общем буду очень благодарен за подсказку как это сделать. Как вообще создавать фиксуты в статическом методе загрузки перед классом?

Ответить