Вышел еще один полезный инструмент для тестирования, PHPixie Illusion.
Если ваше приложение зависит от внешних API то вы наверняка сталкивались с проблемой как представить их в своих тестах. Как раз эту проблему и решает Illusion. Она создает отдельный HTTP сервер на указанном порте и позволяет вам легко управлять его роутами и результатами включая HTTP заголовки. И
все это предельно просто:
//Создаем сервер и клиент
$illusion = \PHPixie\Illusion::start($port = 4747);
//Добавляем роут и получаем его ссылку
$url = $illusion->route('/pixie/fairy', 'Trixie');
//И теперь
echo file_get_contents($url); // 'Trixie'
//Также можно задавать HTTP метод роута
//и заголовки ответа
$headers = array('Content-Type: text/plain');
$url = $illusion->route('/pixie', 'PHPixie', 'GET', $headers);
//Для остановки сервера
$client->stopServer();
//но сервер останавливается автоматически
//в деструкторе клиента
Как это работает ?
Довольно просто. В отдельном процессе запускается немного модифицированный StupidHTTP сервер, к которому добавляются два сокета для перекидывания уведомлений с клиентом. Получив соответствующую команду сервер добавляет роут к своей конфигурации.
Надо заметить что поскольку сервер получает отдельный процесс возможный вариант когда главный поток закончиться а сервер останется висеть ( например при исключении ). Чтобы избежать такого поведения можно поставить вызов к stopServer() в обработчик исключений в вашем тесте.