В общем, я не вижу действительно хорошего решения этой проблемы. Но есть более или менее приемлемый обходной путь:
Обходной прием 1: манипулирование соответствующим файлом конфигурации для каждого теста
$configs = file_get_contents(...)
searchByRegexAndManipulateConfigs(...)
file_put_contents(...)
Это требует больших усилий и замедляет тестирование (из-за чтения / записи в файловую систему).
Обходной путь 2: простые файлы только с одним значением конфигурации
Мы можем создавать файлы, такие как config.auth.type.php
или config.auth.type.txt
(по одному на каждое значение конфигурации, чтобы файл был действительно простым) и использовать inclue
или file_get_contents(...)
вызов как значение в конфигурации. Значение в файле необходимо изменить перед выполнением теста.
Это немного меньше усилий (нам не нужно писать сложные RegEx), но может сделать тест значительно медленнее, так как каждый запрос приложения будет начинаться с чтения дополнительного файла.
Обходной путь 3: передача значений конфигурации через GLOBALS
Это самый простой и быстрый вариант. Мы просто сохраняем необходимое значение в глобальной переменной и читаем его в массиве config (file's). После теста мы удаляем переменную:
AuthBTest
...
protected function setUp() // or setUpBeforeClass()
{
parent::setUp();
$GLOBALS['appTestConfigs']['auth.type'] = 'AuthA';
}
protected function tearDown() // or tearDownAfterClass()
{
parent::tearDown();
unset($GLOBALS['appTestConfigs']);
}
...
/config/autoload/test/local.php
return [
'auth' => [
'type' => isset($GLOBALS['appTestConfigs']['auth.type']) ? $GLOBALS['appTestConfigs']['auth.type'] : 'AuthA',
],
];