Как изменить базу данных для разработки и тестирования на локальной системе без редактирования файла .env
каждый раз?
Из-за этого мне было неудобно практиковать TDD .
Возможно ли, чтобы приложение Laravel отличалось между нормальным развитием и тестированием, чтобы оно могло выбрать подходящую базу данных?
Отредактируйте файл config\database.php
и добавьте в массив connections
массив test -array:
'connections' = [ 'testing' = [ 'driver' => env('DB_TEST_DRIVER'), // more details on your testing database ] ]
Затем добавьте необходимые переменные в ваш .env
.
Откройте 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.