У меня есть приложение Laravel 5 в разработке, в котором есть два теста: Unit
и Functional
. Я определил их в phpunit.xml
:
<testsuite name="Unit"> <directory>./tests/unit</directory> </testsuite> <testsuite name="Functional"> <directory>./tests/functional</directory> </testsuite>
Чтобы функциональные тесты работали корректно, они должны иметь действующую базу данных для работы. Это означает выполнение некоторой настройки перед выполнением функциональных тестов для миграции базы данных.
Обычно я использую свойство DatabaseMigrations
в своих тестах, чтобы убедиться, что база данных перенесена перед каждым тестом. К сожалению, это значительно замедляет наши тесты (у нас сотни). Я переключил тесты на использование свойства DatabaseTransactions
, что заставляет их работать намного быстрее, но теперь база данных не переносится перед запуском тестов. Если я запустил набор тестов на новый клон проекта, он терпит неудачу, потому что я не перенаправил базу данных до запуска функционального набора тестов.
Очевидным решением для этого было добавить $this->artisan('migrate');
к методу setUp
tests/TestCase.php
. Но это имеет две проблемы:
Это приводит к миграции базы данных перед каждым тестом, чего я пытался избежать в первую очередь.
Это также пытается перенести базу данных при запуске набора модулей тестирования, что, очевидно, не является идеальным.
Что для меня лучше всего обеспечить, чтобы база данных для функциональных тестов была перенесена до запуска любых тестов, но только для функциональных тестов?