
Вышел еще один полезный инструмент для тестирования, 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() в обработчик исключений в вашем тесте.
