Насколько я понимаю, я не думаю, что транзакции могут когда-либо работать в сумерках, поскольку каждый запрос браузера в сумерках создает отдельный экземпляр вашего приложения laravel.
Раньше phpunit создавал новое приложение в памяти как часть процесса (в методе setUp
/createApplication
), затем тестировал это тестовое приложение, затем уничтожал его и устанавливал следующее. Таким образом, транзакции могут быть обернуты вокруг (или только внутри) частей создания и уничтожения этого приложения, прежде чем оно запустит новое соединение с базой данных для следующего теста.
С наступлением сумерек это настоящее сквозное тестирование (включая браузер, фальшивое взаимодействие с пользователем, маршрутизацию на вашем локальном компьютере и т. д.), что означает, что не все содержится в среде, в которой выполняются ваши тесты, как они обычно находятся в phpunit.
Сумерки делают следующее:
- Копирует ваш
.env.dusk.*
и запускает chromedriver (или любую другую селеноподобную вещь, которую вы используете)
- Запускает команду оболочки phpunit (т.е. новая команда, новый процесс)
- Команда phpunit запускает ваши тесты в сумерках, каждый из которых открывает окно браузера и отправляет запросы (каждый запрос запускает новый процесс php-fpm и php (для nginx)) — так же, как если бы вы сами делали эти запросы. Каждый из них имеет отдельные подключения к базе данных и поэтому не может взаимодействовать с транзакциями друг друга.
Также стоит отметить, что трейт DatabaseTransactions
находится в пакете Foundation, а не в пакете Dusk, поэтому он не собирается/упаковывается с учетом Dusk.
Это также объясняет, почему sqlite в памяти не работает с сумерками, поскольку один процесс не имеет доступа к памяти другого процесса.
person
Vinayak Kulkarni
schedule
23.06.2017