Установка переменных среды внутри модульных тестов PHP - PullRequest
0 голосов
/ 18 сентября 2018

Я выполняю некоторые базовые модульные тесты для служебной функции, которую я создал несколько лет назад, но она включает в себя доступ к массиву $_SERVER.

Поскольку мои модульные тесты запускаются из командной строки, я должен вручнуюустановить значения массива самостоятельно.

Это хорошо работает с использованием GitLab Runners, потому что для файла .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 Runner находится на компьютере с Linux, поэтому я использовал export для файла gitlab-ci.yml.

Я ожидал, что этот тест пройден, но похоже на команду для установки переменной среды с помощьюshell_exec не меняет значение вообще.Я все еще получаю значение из того, что было определено из файла YAML.

Обновление

Вот сообщение об ошибке:

1) UtilTest::testGetEnvironment
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'localhost'
+'gitlab'

1 Ответ

0 голосов
/ 18 сентября 2018

Любая команда оболочки, которую вы выполняете, будет отдельным процессом и не повлияет на запущенный процесс.Поскольку вы проводите модульное тестирование того, как функция будет использовать переменную $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());
}
...