2013-07-20 2 views
11

Я объявил HTTP_HOST, как показано ниже.Ошибка PHPUnit "undefined index: HTTP_HOST"

public function testReadUser() { 

    $_SERVER['HTTP_HOST'] = "x.y"; 
    . 
    . 
    . 
} 

Несмотря на это, phpunit дает неопределенную ошибку индекса. Почему это?

+0

Можете ли вы опубликовать каждую ошибку, которую вы получите, пожалуйста? –

+1

«undefined index: HTTP_HOST» это был единственный оператор ошибки. Я использовал файл bootstrap.php и добавил строку '$ _SERVER ['HTTP_HOST'] = 'myHost';'. Это решило проблему. Я мало знаю о файле bootstrap.php. Можете ли вы рассказать мне, что такое использование этого файла, и могу ли я передать параметры получения и публикации через этот файл для проверки файлов? – Geek

+0

Я мог бы рассказать вам, но поиск в googling «phpunit bootstrap» даст вам массу соответствующих результатов. –

ответ

3

Это дает вам эту ошибку, потому что вы выполняете тесты через интерфейс командной строки (CLI). CLI не может получить эту информацию, потому что в HTTP-запросы нет запросов.

+0

, но это переменная '$ _SERVER'. – srain

+0

Я использую одну и ту же переменную таким же образом в другом тестовом файле того же проекта. Я использую netbeans, а не командную строку. – Geek

+1

Из руководства: 'HTTP_HOST - содержимое заголовка Host: из текущего запроса, если таковой существует.'. Это означает, что такого заголовка не было. Это браузер, который отправляет этот заголовок. Настройте NetBeans, чтобы отправить его при запуске тестов. Это часть информации, которая считывается из фактического HTTP-запроса, и если ваш клиент не предоставляет эту информацию, PHP не будет создавать указанный индекс в массиве $ _SERVER. – user2601913

23

В файле phpunit.xml вы можете установить переменные сервера. Добавьте php элемент под phpunit корня:

<phpunit> 
    <php> 
     <server name='HTTP_HOST' value='http://localhost' /> 
    </php> 
</phpunit> 

the docs См для получения дополнительной информации.

2

Вы можете объявить значение (необходимое для вашего тестирования) методом тестирования.

Например:

function testMethod(){ 
$_SERVER['yourvar']='yourvalue'; 
...your code making the request via phpunit to the method you are testing 
} 

Объявив $ _SERVER в вашем методе испытаний он будет доступен метод, который вы проверяете. Он работает и для $ _POST и $ _GET, если вам нужны эти значения.