Laravel: таблицы базы данных удалены после запуска теста phpunit - PullRequest
0 голосов
/ 03 сентября 2018

Каждый раз, когда я запускаю тест, все мои таблицы базы данных (кроме таблицы миграции) удаляются, и мне приходится снова запускать миграции. Например, если у меня есть следующие таблицы:

migrations
users
tableA
tableB

после запуска:

phpunit --filter user_can_view_a_record ViewRecordTest Тесты / Feature / ViewRecordTest.php

мои таблицы удалены, и я получаю только таблицу миграции.

Я использую MySQL в качестве базы данных и в соответствии с установленной конфигурацией тесты выполняются в памяти:

database.php

'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            //'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'database' => ':memory:',
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
            'sticky' => true
        ],
]

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>

        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_CONNECTION" value="sqlite" />
        <env name="DB_DATABASE" value=":memory:" />
    </php>
</phpunit>

Спасибо

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

У меня есть решение, если вы используете phpStorm, ищите тестовый фреймворк.

Файл >> Настройки >> Файл и фреймворк >> Тестовый фреймворк.

Установите файл конфигурации по умолчанию phpunit.xml в корневой папке

0 голосов
/ 03 января 2019

решение Майкл Амей хорошо сработало для меня в PHPStorm! спасибо.
Я хотел бы упомянуть, что это также может быть проблема кеша , поэтому попробуйте это:

php artisan config:clear
0 голосов
/ 03 сентября 2018

В общем, вы должны были разделить базу данных с такой же структурой таблиц, как и для env. Это нормальное поведение юнит-тестов (я имею в виду удаление таблиц). Типичный поток для тестирования (для каждого выполнения теста):

  1. удалить все таблицы.
  2. Запускать все миграции (создавать таблицы, изменять таблицы и т. Д.).
  3. Нагрузочные светильники
  4. Выполнить тесты для новой базы данных.

Представьте себе ситуацию, когда один из тестов изменяет данные, например, в пользовательской таблице (изменение адреса электронной почты или имени и т. Д.), Если phpunit не удаляет все данные, и следующие тесты будут работать с неверными данными (измененными другим тестом). Вы можете проверить Основная документация laravel для более подробной информации.

...