Yii2 Codeception: как стереть базу данных при запуске отдельных пакетов? - PullRequest
0 голосов
/ 15 сентября 2018

Как стереть базу данных в шаблоне yii2-app-advanced при запуске отдельных пакетов (например, "backend")?Например:

./vendor/bin/codecept run -- -c backend

(Примечание. Этот подход официально оформлен .)

Я пытаюсь создать несколько модульных тестов, в которых записивставляются как часть теста.Эти записи имеют ограничения unique на некоторые атрибуты.Эти тесты проходят корректно при первом запуске, но если я снова выполню ту же команду, она не будет выполнена (поскольку база данных не была стерта, а записи из предыдущего запуска все еще существуют).

Интересно, достаточно ли выполнить всетестирует сразу (backend + common + frontend), используя следующую команду:

./vendor/bin/codecept run

Тогда все будет работать нормально, поскольку база данных будет очищена.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Только что нашел решение.Оказывается, документация yii2-advanced-app неверна / неполна / устарела.

Отдельные комплекты должны запускаться так:

./vendor/bin/codecept run -c backend

Разница была в том, что двойная черта опущена (* 1006)*).Теперь все работает нормально, и база данных корректно стирается после каждого запуска.

0 голосов
/ 15 сентября 2018

Ваши тесты должны убирать за собой. Вы можете использовать методы _before() и _after(), чтобы обеспечить состояние базы данных до и после каждого выполнения теста.

protected function _before() {
    parent::_before();
    Yii::$app->db->createCommand()->truncateTable('{{%my_table}}');
}

protected function _after() {
    Yii::$app->db->createCommand()->truncateTable('{{%my_table}}');
    parent::_after();
}

Вы также можете попробовать использовать setUpBeforeClass() и tearDownAfterClass() для запуска некоторых событий только один раз до / после выполнения всех тестов класса.

...