Приветствую всех!
Делаю функциональные тесты для приложения на Laravel. Появилось несколько вопросов.
Излагаю. :)
1. Различия make и create методов фабрики
factory(App\User::class)->make();
factory(App\User::class)->create();
Если я верно понял, то create() пишет в таблицу БД, а make() создает только объект модели. Правильно?
Но если так, то можно-ли жизненный пример для чего может понадобиться make()?
2. Правильно ли я понимаю, что при запуске даже одного теста, например, phpunit --filter testNameSingleTest фреймворк откатывает все миграции, а затем (непосредственно перед запуском теста) выполняет их снова. У меня как-то была ошибка в методе down() одной миграции и при запуске теста я получил ошибку. Что и навело меня на такие мысли. Не сильно ли расточительно перезапускать все миграции перед одним тестом? И может быть это как то можно отключить? Пусть бы очищались (удалялись) только записи, которые создавал сам тест.
3. Разница в двух подходах отката БД DatabaseMigrations и DatabaseTransactions. С одной стороны понятно, что первый подход использует миграции, а второй оборачивает каждый тест в транзакцию.
Но проблема в деталях.
а) Какой из методов используется по-умолчанию? У меня по-умолчанию, получается, что все записи остаются в БД после теста. Правильно?
б) Пробовал явно указать DatabaseMigrations и получил после теста базу данных без записей, созданных тестом. В том виде, который можно получить сразу после миграций.
в) Пробовал явно указать DatabaseTransactions и указать в специальном параметре список соединений (их 2 пока), но после теста записи в БД почему-то остались. Правильно ли это? Или я что-то делал неправильно. Что может быть причиной?
г) Написано, что очистка происходит после каждого теста. Тестом считается весь класс теста? Или один метод? Вопрос терминологии.
Может что подскажите...