Приложение Laravel 5 всегда использует конфигурацию среды тестирования

У меня есть приложение Laravel 5 с двумя средами и двумя конфигурациями: тестирование (для конфигурации PHPUnit, встроенная память) и локальная (моя конфигурация разработки).

Даже когда среда настроена как local , приложение загружает только конфигурацию в папке resources/config/testing . Я вижу среду в том же приложении из APP_ENV среды APP_ENV , и она является local .

  • Должен ли я просто не использовать тестовый конфигурационный каталог для настройки моих тестов?

  • Какой лучший способ настроить тестовую среду в Laravel 5?

Related of "Приложение Laravel 5 всегда использует конфигурацию среды тестирования"

Laravel 5 больше не каскадирует конфигурационные файлы, поэтому ваш тестовый файл конфигурации переопределяет все, что у вас есть в вашем локальном файле конфигурации.

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

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

ТЕСТИРОВАНИЕ

Для php-модуля (функционального) вы можете установить переменные env в файле phpunit.xml, например.

 <php> <env name="APP_ENV" value="testing"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/> </php> 

Для тестирования поведения (принятия) расширение Laracasts Laravel Behat позволяет вам создать файл .env.behat для изменения переменных окружения.

Для тестирования phpspec (unit) среда не имеет значения, поскольку вы тестируете отдельные методы изолированно и издеваетесь над всем остальным.

Для тестирования селена (интеграция / система / e2e) переменные среды должны поступать из файла .env на сервере, где бы вы ни проводили это тестирование.

Дополнительные пункты, которые я только должен был использовать, чтобы получить тесты, запущенные на sqlite, в то время как основное приложение обычно по умолчанию использует mysql:

Добавьте что-то подобное в phpunit.xml, как объяснил craig.michael.morris:

 <env name="DB_DRIVER" value="sqlite"/> 

И это изменение в config / database.php

 'default' => env('DB_DRIVER', 'mysql'), 

И в разделе «sqlite» config / database.php

 'database' => ':memory:', 

1) откройте файл конфигурации database.php и добавьте следующее внутри 'connections' => [

 'sqlite_testing' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ], 

это в памяти sqlite будет использоваться для вашего тестирования

2) откройте файл .env и убедитесь, что он имеет следующее:

 DB_CONNECTION=mysql 

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

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

здесь вы можете добавить все связанные с тестированием переменные env

4) в ваших тестах использовалось соединение с базой данных с использованием свойства миграции базы данных:

 use DatabaseMigrations; 

более подробную информацию о DatabaseMigrations см. в документации https://laravel.com/docs/5.1/testing#resetting-the-database-after-each-test