2016-04-13 29 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