Откат миграции Laravel Dusk вызывает исключения, связанные с изменением схемы

Я пытаюсь запустить некоторые браузерные тесты на sqlite в файловой базе данных отдельно от моего приложения.

В одном процессе я запускаю

APP_ENV=local artisan serve --env=dusk.local

А в другом бегу

APP_ENV=local artisan dusk

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

Однако после успешного теста мой журнал Laravel заполняется множеством исключений, отличающихся от тех, которые можно было бы ожидать при выполнении запроса в отсутствие схемы и данных, и других, таких как

General error: 17 database schema has changed in [...]/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:91

Я не могу понять, почему он делает запрос или что-то делает после успешного теста.

class RegistrationTest extends DuskTestCase
{
    use DatabaseMigrations;

    public function testUserCanRegister()
    {
        // Some factories here

        $this->browse(function (Browser $browser) {
            $browser->visit('/register')
                ->assertSee('Sign up');
        });
    }

Который дает

PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 5.5 seconds, Memory: 22.00MB

OK (1 test, 1 assertion)

Но затем я вижу, что мои файлы журналов полны ошибок, если я их выслеживаю.

Кто-нибудь может пролить свет на то, что может происходить?

Файл окружения сумерек, который я использую, приведен ниже.

APP_ENV=local
APP_KEY=...
APP_URL=http://localhost:8000

DB_DEFAULT=app_testing
DB_CONNECTION=app_testing
SECOND_DB_CONNECTION=other_testing #app uses 2 separate databases

SESSION_DRIVER=file

Обновление: некоторые неверные URL-адреса активов вызывали последующие неудачные запросы.

Однако, если я отключу откат, ни одно из вышеупомянутых зарегистрированных исключений не будет создано. Откат, кажется, вызывает проблемы, если данные существуют.

Если я разрешаю откат, но не запускаю фабрики во время теста, он откатывается нормально.

Если я разрешаю откат после вставки данных во время теста, он откатывается, но с множеством исключений.


person Ben Swinburne    schedule 20.07.2017    source источник


Ответы (1)


Даже если у вас нет миграций без миграции в вашей базе данных/миграции/ в папке, и вы use DatabaseMigrations, сумрак запустит миграцию до того, как испортит ваши тесты, и запустит откат после запуска тестов.

Если на момент начала сумерек нет ожидающих миграций, он все равно будет выполняться php artisan migrate, но ничего не будет перенесено.

После того, как тесты будут выполнены, он также запустит php artisan migrate:rollback. Это вернет самый последний пакет миграций.

Если у вас не было готовых к запуску миграций, будет выполнен откат предыдущего пакета миграций. Это может быть любая миграция прямо из коробки 2014_10_12_100000_create_password_resets_table.

Таким образом, откат может привести к удалению таблиц при откате миграций, которые вы вообще не хотели откатывать, разрушив вашу схему, заполнив ваши файлы журналов.

Чтобы выяснить, происходит ли это, просмотрите таблицу миграций непосредственно перед запуском тестов, отсортированную по убыванию идентификатора (самые последние миграции вверху) и посмотрите, удаляются ли строки в сумерках.

Чтобы остановить это поведение, удалите use DatabaseMigrations; из тестового класса.

person NULL pointer    schedule 17.10.2019