2016-04-13 30 views
0

我正在使用Symfony2構建REST API。我已經在使用Liip bundle進行功能測試,並且使用AliceFaker來生成所有的燈具。但是,當我想直接測試POST調用時,我沒有什麼麻煩,因爲POST數據中包含了長的JSON,這使得我的函數變得非常長,難看且不可讀。Symfony2 API測試使用YAML/Faker的POST

我決定將假JSON出來之類的,使用Symfony的解析器將它們轉換爲YAML文件,然後加載它們:

private function loadYaml($resource){ 
     $data = Yaml::parse(file_get_contents('src/AppBundle/DataFixtures/YAML/' . $resource . '.yml')); 
     return $data; 
} 

這似乎是工作得很好,因爲我可以輕鬆地將它們轉換回到JSON對象,然後在通話中使用它:

$postData = json_encode($this->loadYaml('newapplication')); 
$this->client->request(
    'POST', 
    '/api/application/save/', 
    array('data' => $postData), // The Request parameters 
    array(), // Files 
    array(), 
    'mybody', // Raw Body Data 
    true 
); 

我的第一個問題是:這是一個正確的方法嗎?是否有任何我錯過的包裹會讓我的生活變得更輕鬆?

我的第二個問題是可以在這個YAML結構中使用Faker。在我的裝置上,我調用Faker函數(例如< firstName()>),當裝載裝置時自動使用隨機但有意義的值填充我的實體。是否有可能在這些YAML結構中使用它們?

非常感謝! ;)

回答

0

對於您關於bundle的問題,Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase中的WebTestCase非常適合在Symfony項目中對REST API進行測試。

在POST中,數據在正文中,沒有參數。 (How are parameters sent in an HTTP POST request?

嘗試

$this->client->request(
    'POST', 
    '/api/application/save/', 
    array(), // The Request parameters 
    array(), // Files 
    array(), 
    $postData, // Raw Body Data 
    true 
); 
+0

在我們的應用,數據被請求的參數範圍內發送的。我正在使用來自Liip Bundle的WebTestCase,它增加了一些有趣的功能。 – MarcSitges