Intereting Posts
Ссылки на PHP-переменные и использование памяти Обтекание строк текста в границах изображения с помощью gd Команды не синхронизированы; вы не можете запустить эту команду сейчас PHP не распознается как внутренняя или внешняя команда в командной строке JavaScript-эквивалент preg_replace PHP Являются ли «elseif» и «else if» полностью синонимичными? Создайте файл Google Chrome Crx с помощью PHP В чем разница между открытыми тегами PHP «<? =» И «<? Php» / «<?»? Получить идентификатор элемента и установить его как переменную php strtotime «последний понедельник», если сегодня понедельник? Скремблирование изображений ссылок на изображения в PHP Msgstr "Соединение для элемента управления, определенное в вашей конфигурации, не удалось" с phpMyAdmin в XAMPP (PHP5) Извлечение тега заголовка и адреса RSS-канала из HTML с помощью PHP DOM или Regex Как добавить класс в ссылку в wp_nav_menu? warning feof () ожидает, что параметр 1 будет ресурсом

Приложение PhalconPHP MVC Micro: укажите путь запроса и верните код ответа

Я следил за учебным модулем и модифицировал его, чтобы проверить HTTP-запрос на приложение Micro MVC на основе этой публикации . Я могу успешно проверить выходную строку, однако я не уверен, как утверждать код состояния ответа или изменять путь запроса.

index.php

<?php $app = new \Phalcon\Mvc\Micro(); #Default handler for 404 $app->notFound(function () use ($app) { $app->response->setStatusCode(404, "Not Found")->sendHeaders(); }); $app->post('/api/robots', function() use ($app) { //Parse JSON as an object $robot = $app->request->getJsonRawBody(); //Build the response $app->response->setJsonContent($robot); return $app->response; }); $app->get('/', function() { echo 'Hello'; }); $app->handle(); 

Тесты / UnitTest.php

 class MvcMicroUnitTest extends \UnitTestCase { public function testNotFound() { $path = '/invalid'; $mockRequest = $this->getMock("\\Phalcon\\Http\\Request"); //TODO: Set an invalid URL $path in the mock $this->di->set('request', $mockRequest, true); include("../index.php"); //TODO: Assert status is 404 $this->expectOutputString(''); } public function testPostRobot() { $rawJson = '{"name":"C-3PO","type":"droid","year":1977}'; $path = '/api/robots'; $mockRequest = $this->getMock("\\Phalcon\\Http\\Request", array( "getJsonRawBody")); $mockRequest->expects($this->any()) ->method("getRawBody") ->will($this->returnValue($rawJson)); //TODO: Set the $path in the mock $this->di->set('request', $mockRequest, true); include("../index.php"); //TODO: Assert status is 200 $this->expectOutputString($rawJson); } } в class MvcMicroUnitTest extends \UnitTestCase { public function testNotFound() { $path = '/invalid'; $mockRequest = $this->getMock("\\Phalcon\\Http\\Request"); //TODO: Set an invalid URL $path in the mock $this->di->set('request', $mockRequest, true); include("../index.php"); //TODO: Assert status is 404 $this->expectOutputString(''); } public function testPostRobot() { $rawJson = '{"name":"C-3PO","type":"droid","year":1977}'; $path = '/api/robots'; $mockRequest = $this->getMock("\\Phalcon\\Http\\Request", array( "getJsonRawBody")); $mockRequest->expects($this->any()) ->method("getRawBody") ->will($this->returnValue($rawJson)); //TODO: Set the $path in the mock $this->di->set('request', $mockRequest, true); include("../index.php"); //TODO: Assert status is 200 $this->expectOutputString($rawJson); } } в class MvcMicroUnitTest extends \UnitTestCase { public function testNotFound() { $path = '/invalid'; $mockRequest = $this->getMock("\\Phalcon\\Http\\Request"); //TODO: Set an invalid URL $path in the mock $this->di->set('request', $mockRequest, true); include("../index.php"); //TODO: Assert status is 404 $this->expectOutputString(''); } public function testPostRobot() { $rawJson = '{"name":"C-3PO","type":"droid","year":1977}'; $path = '/api/robots'; $mockRequest = $this->getMock("\\Phalcon\\Http\\Request", array( "getJsonRawBody")); $mockRequest->expects($this->any()) ->method("getRawBody") ->will($this->returnValue($rawJson)); //TODO: Set the $path in the mock $this->di->set('request', $mockRequest, true); include("../index.php"); //TODO: Assert status is 200 $this->expectOutputString($rawJson); } } 

Solutions Collecting From Web of "Приложение PhalconPHP MVC Micro: укажите путь запроса и верните код ответа"

Хорошие новости и плохие новости. Хорошо: насколько вы используете стандартный принцип диспетчеризации, у вас будет ответ, который будет содержать необходимую вам информацию. Маленький трюк – при успешном статусе заголовка устанавливается значение false .

 /** * @param $expected * @throws ExpectationFailedException * @return $this */ protected function assertResponseCode($expected) { $actual = $this->di->getResponse()->getHeaders()->get('Status'); if ($actual !== false && $expected !== 200 && !preg_match(sprintf('/^%s/', $expected), $actual)) { throw new ExpectationFailedException(sprintf('Failed asserting that response code is "%s".', $expected)); } $this->assertTrue(true); return $this; } 

Плохо: вы делаете это неправильно. Это область функциональных / приемочных испытаний, и есть сказочная структура под названием Behat . Вы должны делать свои собственные исследования, но по существу, в то время как PHPUnit отлично справляется с тестированием более или менее независимых блоков функциональности, он отсасывает при тестировании более крупных вещей, таких как выполнение полного запроса. Позже вы начнете испытывать проблемы с ошибками сеанса, неправильно сконфигурированной средой и т. Д., Потому что каждый запрос должен быть выполнен в собственном отдельном пространстве, и вы вынуждаете его делать противоположное. Behat, с другой стороны, работает совсем по-другому, где для каждого сценария (после робота, просмотра несуществующей страницы) он отправляет новый запрос на сервер и проверяет результат. Он в основном используется для окончательного тестирования всего, что работает вместе, делая утверждения о конечном результате (объект ответа / html / json).