Инициализация фикстуры на которую ссылаются другие таблицы.

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

Инициализация фикстуры на которую ссылаются другие таблицы.

Сообщение voodooism »

При написании тестов с фикстурами возникла следующая проблема.
Я пытаюсь протестировать ActiveRecord модель, но тесты валятся изза того, что на таблицу этой модели в базе данных уже ссылается другая таблица. Как удалось выяснить происходит следующее: При инициализации фикстуры SQL запрос отключает ограничения целостности, очищает данные таблицы в которую должны залится данные фикстуры, и потом включает ограничения целостности обратно. На этом моменте выполнение тестов заваливается :(

Прикладываю код запроса который отправляет codeception.

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

ALTER SESSION SET
    NLS_TIMESTAMP_FORMAT = 'dd.mm.yyyy hh24:mi:ss'
    NLS_DATE_FORMAT = 'dd.mm.yyyy'
    NLS_TIMESTAMP_TZ_FORMAT = 'dd.mm.yyyy hh24:mi:ss'
    NLS_DATE_LANGUAGE = 'RUSSIAN'
    NLS_TERRITORY = 'RUSSIA'
            BEGIN
              FOR c IN
              (SELECT c.owner, c.table_name, c.constraint_name
               FROM user_constraints c, user_tables t
               WHERE c.table_name = t.table_name
               AND c.status = 'ENABLED'
               AND c.constraint_type = 'R'
               ORDER BY c.constraint_type)
              LOOP
                DBMS_UTILITY.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
              END LOOP;
            END;
        DELETE FROM "SOME_TABLE"DROP SEQUENCE "SEQ_SOME_TABLE_ID"CREATE SEQUENCE "SEQ_SOME_TABLE_ID" START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCACHE
            BEGIN
              FOR c IN
              (SELECT c.owner, c.table_name, c.constraint_name
               FROM user_constraints c, user_tables t
               WHERE c.table_name = t.table_name
               AND c.status = 'DISABLED'
               AND c.constraint_type = 'R'
               ORDER BY c.constraint_type)
              LOOP
                DBMS_UTILITY.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" enable constraint ' || c.constraint_name);
              END LOOP;
            END;
Как быть в таком случае?
Ответить