Откат фикстур и изменений в базе при Unit-тестах

codeception
Теги: #<Tag:0x00007fedbbeed288>

#1

Добрый день! Пробую писать юнит тесты для Yii2 проекта и возникла проблема, что если в ходе теста происходила запись в базу, то эти изменения не откатываются после окончания теста.
unit.suite.yml :

class_name: UnitTester
modules:
    enabled:
        - Yii2:
            part: ORM
            configFile: 'codeception/config/unit.php'
            cleanup: true

В самом тесте есть такой код:

$shop = new Shop([
        'user_id' => 64836119547434,
        'title' => 'shop1',
    ]);
    $shop->scenario = Shop::SCENARIO_CREATE;
    $shop->save();

Аналогичная проблема с фикстурами, они накатываются но не очищаются после теста. Может кто знает в чем проблема?


(Ray Romanov) #2

Это в настройках базы делается, http://codeception.com/docs/modules/Db


(Michael Bodnarchuk) #3

Может проблема в том, что транзакция почему-то не стартует?
Проверьте выполняется ли это условие https://github.com/Codeception/Codeception/blob/2.1/src%2FCodeception%2FModule%2FYii2.php#L80


#4

Сначала тоже подумал что транзакция не стартует, посмотрел дебагером, это условие выполняется, так же как и условие для отката транзакции:


(Sergey Konkov) #5

ну и давайте будем честными, что это не Unit тесты


(Michael Bodnarchuk) #6

тогда вероятнее всего данные пишутся в другом конекшне…


(Ruslan Remenkov) #7

да, так и есть, но только не совсем понятно как решить проблему то?! Рисовать костыли в before и after? У меня вообще получается внутри теста один коннекшн со своей транзакцией, а внутри MyAwesomeFixture класса (yii2) другой коннекшн тоже со своей транзакцией, и не одна транзакция не откатывается. Быть может не решена проблема неработающих вложенных транзакций в MySQL?


#8

На случай если у кого-то будет аналогичная проблема, то проблема действительно была в том, что транзакция стартовала в одном конекшене, а запись в базу в ходе теста происходила уже в другом.
Проблема была в https://github.com/yiisoft/yii2-codeception, на данный момент в девелоп версии проблема решена. По крайней мере на PostgresQL теперь откат в транзакции работает корректно.