Symfony 5 Функциональные тесты - переменные среды отсутствуют, getenv () возвращает false - PullRequest
1 голос
/ 05 августа 2020

Я переписывал один из своих проектов на Symfony 5. Я заметил нечто странное в переменных env. Я больше не могу получить их так, как раньше, в функциональных тестах.

Не то, чтобы это важно, но у меня есть собственный ApiTestCase, который расширяет существующий тестовый пример, поставляемый с Symfony 5.

Там я делаю что-то вроде этого (это не вопрос дизайна или потока моего приложения, а просто о том, как получить переменную):

<?php

namespace App\Tests;

use App\Traits\Tools\Tests\Database\UsesTestDatabase;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

/**
 * Class ApiTestCase
 * @package App\Tests
 */
class ApiTestCase extends WebTestCase
{
   /**
     * ApiTestCase constructor.
     */
    public function __construct()
    {
        parent::__construct();
        dd(getenv('TEST_ENV_VARIABLE')) // should give me 'my secret env value'
    }
}

# this is .env.test file

############################################################################################################
#
# GENERAL SETTINGS
#
############################################################################################################

KERNEL_CLASS='App\Kernel'
APP_ENV=test

############################################################################################################
#
# TEST DATABASE CONFIGURATION
#
############################################################################################################

TEST_ENV_VARIABLE='my secret env value'

TEST_ENV_VARIABLE возвращается как ложное. Всегда. Не имеет значения, помещаю ли я его в .env.test или phpunit.xml.dist или в любой другой файл, на который я укажу. Всегда возвращается как false.

Что интересно - у меня не было этой проблемы в Symfony 4. Я смотрю на свой старый код и просто getenv() просто работает.

Я провел небольшое исследование, и в файле config/bootstrap.php все мои переменные для тестовой ENV видны в $_SERVER, но по какой-то причине они никогда не перетаскиваются в ENV. Есть ли что-то другое в Symfony 5 по этому поводу?

Я просмотрел документы, но не нашел ничего, что могло бы мне помочь (или я просто пропустил это). Кто-нибудь знает, что это может быть?

Если честно, ни одна из переменных ENV не присутствует, когда я использую getenv() в своих тестах. Даже стандартные, поставляемые с Symfony.

. Я использую Symfony PHP блочный мост и просто запускаю свои тесты следующим образом:

./bin/phpunit tests/Integration/Container/Controllers/ContainerControllerTest.php

Я почти уверен, что это как-то связано с моей настройкой - просто не уверен, что это могло быть.

1 Ответ

1 голос
/ 05 августа 2020

С Symfony 5 использование putenv в компоненте dotenv устарело. Вы должны использовать $_ENV или $_SERVER для доступа к переменным среды.

Вы можете найти PR здесь , если вас интересует более подробная информация

...