Каждый раз, когда я запускаю тест, все мои таблицы базы данных (кроме таблицы миграции) удаляются, и мне приходится снова запускать миграции. Например, если у меня есть следующие таблицы:
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>
Спасибо
У меня есть решение, если вы используете phpStorm ищи тестовый фреймворк.
Файл >> Настройки >> Файл & Framework >> Тестовые рамки.
Установите файл конфигурации по умолчанию phpunit.xml в вашей корневой папке
решение Майкл Амейо хорошо работал для меня в PHPStorm! благодарю вас.
Я хотел бы отметить, что это может быть также проблема с кешем, так что попробуйте это:
php artisan config:clear
В общем, вы должны были разделить базу данных с такой же структурой таблиц, как и для env. Это нормальное поведение юнит-тестов (я имею в виду удаление таблиц).
Типичный поток для тестирования (для каждого выполнения теста):
Представьте себе ситуацию, когда один из тестов изменяет данные, например, в пользовательской таблице (изменение адреса электронной почты или имени и т. Д.), Если phpunit не удаляет все данные, и следующие тесты будут работать с неверными данными (измененными другим тестом).
Ты можешь проверить основная документация Больше подробностей.