Настройка переменных среды внутри модульных тестов PHP
Я провожу базовое модульное тестирование функции полезности, которую я сделал много лет назад, но она включает доступ к массиву $_SERVER
.
Поскольку мои модульные тесты выполняются из командной строки, мне приходится самостоятельно вручную устанавливать значения массива.
Это хорошо работает с использованием бегунов GitLab, потому что в файле .gitlab-ci.yml
я просто делаю что-то вроде:
before_script:
- export SERVER_PORT="80"
- export SERVER_NAME="gitlab"
В настоящее время мой тест не может проверить все операторы этой функции, поскольку он проверяет значение $_SERVER['SERVER_NAME']
.
Единица измерения Тест
public function testGetEnvironment() {
shell_exec('set SERVER_NAME="localhost"');
$this->assertEquals("localhost", $this->util->get_environment());
shell_exec('set SERVER_NAME="gitlab"');
$this->assertEquals("gitlab", $this->util->get_environment());
}
ПРИМЕЧАНИЕ: Мне пришлось использовать set
, так как я на машине с Windows, в то время как наш бегун GitLab находится на машине с Linux, поэтому я использовал export
в файле gitlab-ci.yml
.
Я ожидал, что этот тест пройдет, но похоже, что команда для установки переменной среды с помощью shell_exec
вообще не меняет значение. Я все еще получаю значение из того, что было определено в файле YAML.
Обновление
Вот сообщение об ошибке:
1) UtilTest::testGetEnvironment
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'localhost'
+'gitlab'
1 answers
Любая выполняемая вами команда оболочки будет отдельным процессом и не повлияет на запущенный процесс.
Поскольку вы модульно тестируете, как функция будет использовать переменную $SERVER
, вам не нужно проходить через все хлопоты, связанные с тем, как она будет установлена в "реальном" сценарии - просто вручную измените ее и протестируйте свою функцию:
public function testGetEnvironment() {
$SERVER["SERVER_NAME"] = "localhost";
$this->assertEquals("localhost", $this->util->get_environment());
$SERVER["SERVER_NAME"] = "gitlab";
$this->assertEquals("gitlab", $this->util->get_environment());
}