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

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

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

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

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

Ответ 1

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 на сервере, где бы вы ни проводили это тестирование.

Ответ 2

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

Ответ 3

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"/>

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

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

use DatabaseMigrations;

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

Ответ 4

Это 2019 год. У меня были такие проблемы так долго, что я не смог разобраться. И вот мое предположение: если вам также трудно заставить ваш PHPUnit.xml общаться с вашим файлом .env.testing, то вы, вероятно, используете PHPStorm! Если это правда, продолжайте читать. Если нет, нет... это не поможет. Хорошо... Вот, пожалуйста

  1. Зайдите в настройки вашего PHPStorm или просто нажмите Ctrl + Alt + S.
  2. Перейти к Языки и фреймворки >> PHP >> Тест фреймворков
  3. На вкладке "Выполнение теста" щелкните "Файл конфигурации по умолчанию" и выберите (нажав на значок папки) путь к файлу PHPUnit.xml вашего проекта.

Для этого все ваши изменения в файле XML вступят в силу. Итак, продолжайте, создайте файл .env.testing, создайте ваши предпочтительные переменные конфигурации БД для тестирования... и попробуйте снова запустить ваши тесты!