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

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

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

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

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

11

Решение

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 (модульного) тестирования хорошо среда не должна иметь значения, так как вы тестируете отдельные методы изолированно и все остальное издеваетесь.

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

27

Другие решения

Дополнительные пункты, которые я только что использовал, чтобы запустить тесты на 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:',
16

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

3
По вопросам рекламы [email protected]