Я разработал набор тестовых примеров, использующих phpunit, используемые для тестирования как сайта разработки, так и производственного сайта. Единственное отличие – это доменное имя. Как передать домен из командной строки в тестовые примеры phpunit, так что мне не нужно изменять каждый файл?
В phpunit-bootstrap.php
вы можете сделать что-то вроде этого:
$site = getenv('DOMAIN');
и использовать
<php> <env name="DOMAIN" value="http://production.com"/> </php>
в файле phpunit.xml
как показано в документации .
Недостатком этого подхода является то, что вам нужно иметь два разных xml
файла.
Другие варианты используют пользовательский сценарий оболочки вокруг phpunit, как показано на рисунке @DavidHarkness, который имеет тенденцию хорошо работать
или, если вы не хотите запускать эти тесты автоматическим способом (или использовать оба подхода), чтобы сделать что-то вроде:
$site = getenv('DOMAIN'); if(!$site) { echo "Enter Domain: "; $site = fgets(STDIN); }
и попросите бегуна проверить среду, и если ничего не просят вас о домене.
То же самое касается практически всех способов, с помощью которых php может принимать входные данные из внешнего мира.
<php> <define name="DOMAIN" value="http://production.com"/> </php>
также работает, если вы используете константу в любом случае, например.
Перед запуском тестов вы можете установить переменную среды. Чтобы сделать это проще для себя, создайте простой скрипт для экспорта переменной и выполнения тестов.
#!/bin/bash USAGE="Usage: $0 <domain> [file-or-directory]" if [ "$#" == "0" ]; then echo "$USAGE" exit 1 fi export TEST_DOMAIN=$1 shift phpunit $*
В базовом тестовом примере вы можете получить доступ к этому значению с помощью getenv
:
$domain = getenv('TEST_DOMAIN');
Я тоже столкнулся с этим. Один из способов сделать это с помощью bash
– экспортировать переменные ENV, которые вы хотите передать, и связать вызов phpunit с помощью ;
вот так:
#: HOST_NAME="my.host.com"; phpunit MyTestFile.php
Это создаст HOST_NAME
среды HOST_NAME
и сразу же вызовет ваш модульный тест.
Затем в вашем тестовом скрипте вы можете получить доступ к переменной HOST_NAME
используя что-то вроде:
$host = getenv('HOST_NAME');