Laravel 5: используйте другую базу данных для тестирования и локальную

Как изменить базу данных для разработки и тестирования на локальной системе без редактирования файла .env каждый раз?

Из-за этого мне было неудобно практиковать TDD .

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

Создайте конфигурацию тестовой базы данных в Laravel

Отредактируйте файл config\database.php и добавьте в массив connections массив test -array:

 'connections' = [ 'testing' = [ 'driver' => env('DB_TEST_DRIVER'), // more details on your testing database ] ] 

Затем добавьте необходимые переменные в ваш .env .

Изменить конфигурацию PHPUnit

Откройте phpunit.xml и добавьте следующее в свой <php> -tag:

<env name="DB_CONNECTION" value="testing"/>

Теперь PHPUnit будет запускаться с тестами по базе данных, которые вы определили в testing -array.

Для Laravel 5.5 правильный способ сделать это – создать файл тестовой среды с именем .env.testing. Здесь вы можете определить свою тестовую среду, включая базу данных, которую вы хотите использовать для тестирования …

 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=test DB DB_USERNAME=test DB user DB_PASSWORD=test DB password 

Затем запустите эту команду …

 php artisan config:cache --env=testing 

Это позволит настроить кеш к параметрам файла .env.testing.

Вот ссылка на документацию.

Если ваша тестовая база данных использует одну и ту же конфигурацию, но только ее имя отличается, вы можете изменить только выбранное имя базы данных, добавив

 <env name="DB_DATABASE" value="testing_db_name"/> 

к файлу phpunit.xml в узле <php>

В Laravel 5 у вас должен быть файл .env на вашем локальном сервере, а другой – на сервере тестирования.

 // local .env DB_HOST=192.168.10.10 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=************ // testing .env DB_HOST=localhost DB_DATABASE=app_test DB_USERNAME=app_test DB_PASSWORD=************ 

Позже вы можете использовать envoy для автоматизации обслуживания этих многократных файлов .env , так как они вам также понадобятся для staging и production среды.

Вы можете использовать другой файл .env для каждого типа теста. Вы можете изменить свои тесты / functional.suite.yml и tests / unit.suite.yml примерно так:

 class_name: FunctionalTester modules: enabled: [Laravel5, FunctionalHelper, Asserts] config: Laravel5: environment_file: .env.testing 

И это:

 class_name: UnitTester modules: enabled: [Asserts, UnitHelper, Laravel5] config: Laravel5: environment_file: .env.unittesting 

Или вы можете просто изменить свой phpunit.xml и добавить окружения, например, @Tijmen.