Laravel phpunit - почему тесты обновляют живую базу данных

У меня есть проект laravel, у которого есть проблема, что означает, что всякий раз, когда я запускаю тест, обновляется база данных db (я использую use RefreshDatabase;), а не базу данных test-db.

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

Когда я запускаю dd(app()->environment());, он показывает «тестирование», поэтому я ожидаю, что база данных db-test обновится.

Я использую phpstorm, но не думаю, что это проблема.

Вот (очищенный) файл env:

DB_HOST=127.0.0.1
DB_DATABASE=db
DB_USERNAME=root
DB_PASSWORD=

TEST_DB_HOST=127.0.0.1
TEST_DB_DATABASE=test-db
TEST_DB_USERNAME=root
TEST_DB_PASSWORD=

(очищено) config / database.php:

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'db'),
        'username' => env('DB_USERNAME', 'root'),
        'password' => env('DB_PASSWORD', ''),
        // other settings
    ],

    'test-mysql' => [
        'driver' => 'mysql',
        'host' => env('TEST_DB_HOST', 'localhost'),
        'port' => env('TEST_DB_PORT', '3306'),
        'database' => env('TEST_DB_DATABASE', 'test-db'),
        'username' => env('TEST_DB_USERNAME', 'root'),
        'password' => env('TEST_DB_PASSWORD', ''),
        // other settings
    ],

И (очищенный) 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"
         syntaxCheck = "false">
    <testsuites>
        <testsuite name = "Application Test Suite">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
    <php>
        <env name = "APP_ENV" value = "testing"/>
        <env name = "APP_URL" value = "http://app.localhost"/>
        <env name = "DB_CONNECTION" value = "test-mysql"/>
        <env name = "MAIL_DRIVER" value = "log"/>
        <env name = "CACHE_DRIVER" value = "array"/>
        <env name = "SESSION_DRIVER" value = "array"/>
        <env name = "QUEUE_DRIVER" value = "sync"/>
    </php>
</phpunit>

Есть ли у кого-нибудь идеи, что это может быть или где проверить дальше?

Вроде все правильно, вы пытались очистить конфиг с помощью php artisan config:clear

Remul 04.10.2018 11:43

@Remul пробовал, не сработало

Leon Segal 04.10.2018 11:50

Если вы запускаете тесты из phpstorm, убедитесь, что phpstorm использует правильный файл конфигурации phpunit. Для меня это: «Настройки> Языки и фреймворки> PHP> Тестовые фреймворки> ваша конфигурация> Test Runner». «Файл конфигурации по умолчанию» должен иметь правильный путь.

Remul 04.10.2018 11:59

@Remul, да, вот и все! Я добавил путь к своему файлу phpunit.xml, и теперь он отлично работает! Спасибо! Если вы хотите добавить это в качестве ответа, я приму его как правильный.

Leon Segal 04.10.2018 12:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
4
901
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Убедитесь, что phpstorm использует правильный файл конфигурации phpunit:

Settings > Languages & Frameworks > PHP > Test Frameworks > your config > Test Runner.

Default configuration file должен иметь правильный путь.

Я добавил путь к своему файлу phpunit.xml, и он сработал - у коллеги была такая же проблема с тем же исправлением

Leon Segal 04.10.2018 15:10

Другие вопросы по теме