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

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

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

Сообщение Chelobaka »

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

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

То есть 1 раз заполнить таблицы и потом пройти все тесты в одном классе, после таблицы уже сами очистятся. Сейчас загрузка всех фикстур в методе _before и как следаствие грузятся при каждом тесте.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

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

Сообщение maleks »

Попробуйте указать haveFixtures() в setUpBeforeClass() , при этом в классе теста не использовать _fixtures() (или у вас в _before()?) чтобы оно не переопределило
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

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

Сообщение maleks »

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

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

Сообщение Chelobaka »

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

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

Сообщение Chelobaka »

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

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

Сообщение maleks »

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

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

namespace Codeception\Test;
class Unit extends \PHPUnit\Framework\TestCase
Тут посмотрите Пример 4.2
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

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

Сообщение Chelobaka »

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
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

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

Сообщение maleks »

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

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

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

Лучше бы вы подумали почему ваши фикстуры так долго грузятся.
Много данных?
Может индексы убрать?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

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

Сообщение maleks »

Или например можете фикстуру подключить только в первом тесте и выставить cleanup в false
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

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

Сообщение Chelobaka »

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

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

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

Лучше бы вы подумали почему ваши фикстуры так долго грузятся.
Много данных?
Может индексы убрать?
Таблица Валют и Стран с языками. По 3 на каждый. Много букав короче.
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

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

Сообщение Chelobaka »

Может я слепой но сколько не пытался найти как это сделать, вариантов нет. То есть все грузится перед каждый тестом.
То есть вообще нет функционала запускать что то перед классом теста и всё.
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

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

Сообщение Chelobaka »

Господа знатоки подскажите пожалуйста. Как все таки инициировать загрузку fixture единожды для класса тестов. Спасибо.
Аватара пользователя
Chelobaka
Сообщения: 214
Зарегистрирован: 2018.06.01, 09:54

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

Сообщение Chelobaka »

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

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

Сообщение Chelobaka »

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

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

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

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