2014-06-03 4 views
0

Как сделать проверить запрос GET API REST с PHPUnit 4.1? Я использую Slim PHP-Framework и могу проверить код ответа , но не тело или заголовок. Это то, что я до сих пор:Тестировать запрос REST get

TestClass:

class AssetTest extends PHPUnit_Framework_TestCase 
{ 

public function request($method, $path, $options = array()) 
{ 
    // Capture STDOUT 
    ob_start(); 

    // Prepare a mock environment 
    Environment::mock(array_merge(array(
     'REQUEST_METHOD' => $method, 
     'PATH_INFO' => $path, 
     'SERVER_NAME' => 'slim-test.dev', 
    ), $options)); 

    $app = new \Slim\Slim(); 
    $this->app = $app; 
    $this->request = $app->request(); 
    $this->response = $app->response(); 

    // Return STDOUT 
    return ob_get_clean(); 
} 

    public function get($path, $options = array()){ 
     $this->request('GET', $path, $options); 
    } 

    public function testGetAssets(){ 
     $this->get('/asset'); 
     $this->assertEquals('200', $this->response->status()); 
    } 
} 

Если мой JSON ответ http://example.com/asset выглядит следующим образом (код 200):

[ 
    { 
    "AssetID": "4b0be88b9e853", 
    "AssetStatusID": "1" 
    } 
] 
+1

Вы уверены, что вы делаете Модульное тестирование? Речь идет о тестирующих устройствах, а не о функциональности. В этом случае вы можете протестировать свою функцию действия («$ actionMethod» в вашем '$ app-> get ('\ some \ url', $ actionMethod). Функциональное тестирование API REST можно и нужно делать вручную , так как нет очень хороших автоматических инструментов, но вы можете попробовать что-то вроде SoapUI. –

+0

Итак, вы имеете в виду тестирование функции модели, которая, например, делает запрос на базу данных? – toefftoefftoeff

+1

yep, это было бы неплохо. Если у вас есть некоторое промежуточное ПО , вы можете проверить это тоже. –

ответ

0

Все это хорошо. Чтобы получить ответ, просто вызовите $response->getBody() и используйте json_decode для декодирования этого ответа. Чтобы получить заголовок, вызовите $response->getHeaders().

В вашем случае это будет $this->response->getBody(). Таким образом, ваш метод испытания будет выглядеть следующим образом

public function testGetAssets(){ 
     $this->get('/asset'); 
     $response = json_decode($this->response->getBody(), true); //response body 
     $headers = $this->response->getHeaders() //response headers 
     $this->assertEquals('200', $this->response->status()); 
    } 

Этот ответ является уважение к последней версии guzzlehttp т.е. 6,0

Смежные вопросы