Загрузка fixture один раз для всего теста
Загрузка fixture один раз для всего теста
Здравствуйте,
У меня есть формы в которых есть валидации по существования записи в таблице.
Как загружать фикстуры для класса теста единожды?
То есть 1 раз заполнить таблицы и потом пройти все тесты в одном классе, после таблицы уже сами очистятся. Сейчас загрузка всех фикстур в методе _before и как следаствие грузятся при каждом тесте.
У меня есть формы в которых есть валидации по существования записи в таблице.
Как загружать фикстуры для класса теста единожды?
То есть 1 раз заполнить таблицы и потом пройти все тесты в одном классе, после таблицы уже сами очистятся. Сейчас загрузка всех фикстур в методе _before и как следаствие грузятся при каждом тесте.
Re: Загрузка fixture один раз для всего теста
Попробуйте указать haveFixtures() в setUpBeforeClass() , при этом в классе теста не использовать _fixtures() (или у вас в _before()?) чтобы оно не переопределило
Re: Загрузка fixture один раз для всего теста
хотя я б так не делал.
Тест есть тест и под него каждый раз должна гарантированно установиться фикстура.
А не надежда что мол раз только читаем, то давай секономим.
Все это будет запутывать кому придется с таким кодом возможно дальше работать.
Во внутряках копаться никому неохота, вон вы как долго с тестами возитесь, и все что то не получается, а если это еще и поверх запутать...
Тест есть тест и под него каждый раз должна гарантированно установиться фикстура.
А не надежда что мол раз только читаем, то давай секономим.
Все это будет запутывать кому придется с таким кодом возможно дальше работать.
Во внутряках копаться никому неохота, вон вы как долго с тестами возитесь, и все что то не получается, а если это еще и поверх запутать...
Re: Загрузка fixture один раз для всего теста
Так то оно так но у меня один класс 30 сек. тестируется. 10 таблиц заполняется и только для чтения. Так что без вариантов. Ну а кто будет после увидит что тест провален, полезет в него и поймет что да как.maleks писал(а): ↑2019.09.24, 15:43 хотя я б так не делал.
Тест есть тест и под него каждый раз должна гарантированно установиться фикстура.
А не надежда что мол раз только читаем, то давай секономим.
Все это будет запутывать кому придется с таким кодом возможно дальше работать.
Во внутряках копаться никому неохота, вон вы как долго с тестами возитесь, и все что то не получается, а если это еще и поверх запутать...
Re: Загрузка fixture один раз для всего теста
Юнит тесты Codeception основаны на PHPUnit
Код: Выделить всё
namespace Codeception\Test;
class Unit extends \PHPUnit\Framework\TestCase
Re: Загрузка fixture один раз для всего теста
Проблема в том была что метод статический.
А фикстуры я гружу так:
Код: Выделить всё
$this->tester->haveFixtures([
'user' => [
....
Re: Загрузка fixture один раз для всего теста
А так, по хакерски, не получится?
Я в кишках Codeception не так много рылся и не вчера, так что это так, наугад.
Лучше бы вы подумали почему ваши фикстуры так долго грузятся.
Много данных?
Может индексы убрать?
Код: Выделить всё
$test = new self;
$module = $test->getModule('Yii2');
$module->haveFixtures(...
Лучше бы вы подумали почему ваши фикстуры так долго грузятся.
Много данных?
Может индексы убрать?
Re: Загрузка fixture один раз для всего теста
Или например можете фикстуру подключить только в первом тесте и выставить cleanup в false
Re: Загрузка fixture один раз для всего теста
Таблица Валют и Стран с языками. По 3 на каждый. Много букав короче.maleks писал(а): ↑2019.09.25, 13:44 А так, по хакерски, не получится?Я в кишках Codeception не так много рылся и не вчера, так что это так, наугад.Код: Выделить всё
$test = new self; $module = $test->getModule('Yii2'); $module->haveFixtures(...
Лучше бы вы подумали почему ваши фикстуры так долго грузятся.
Много данных?
Может индексы убрать?
Re: Загрузка fixture один раз для всего теста
Может я слепой но сколько не пытался найти как это сделать, вариантов нет. То есть все грузится перед каждый тестом.
То есть вообще нет функционала запускать что то перед классом теста и всё.
То есть вообще нет функционала запускать что то перед классом теста и всё.
Re: Загрузка fixture один раз для всего теста
Господа знатоки подскажите пожалуйста. Как все таки инициировать загрузку fixture единожды для класса тестов. Спасибо.
Re: Загрузка fixture один раз для всего теста
Класс теста наследуется от extends \Codeception\Test\Unit. В нём нет метода globalFixtures. Данный метод есть только в yii\test\FixtureTrait; но подключение этого трейта желаемого результата не дало, метод не вызывается.
Re: Загрузка fixture один раз для всего теста
Попробовал уже и схитрить. Вызывать создание фикстур через метод и в нем проверять по переменной были они загружены или нет. Насколько я понял из того что переменная всегда возвращается к дефолтному значение клас каждый раз перегружается и это не сработает.
Как использовать фикстуры в статическом методе setUpBeforeClass я так и не понял. Пробовал создавать метод внутри для доступа к haveFixtures так возвращал ошибку Yii2: Module can't be accessed
$test = new Unit(); или $test = new self;
Тут ошибка $module = $test->getModule('Yii2');
В общем буду очень благодарен за подсказку как это сделать. Как вообще создавать фиксуты в статическом методе загрузки перед классом?
Как использовать фикстуры в статическом методе setUpBeforeClass я так и не понял. Пробовал создавать метод внутри для доступа к haveFixtures так возвращал ошибку Yii2: Module can't be accessed
$test = new Unit(); или $test = new self;
Тут ошибка $module = $test->getModule('Yii2');
В общем буду очень благодарен за подсказку как это сделать. Как вообще создавать фиксуты в статическом методе загрузки перед классом?