使用YAML / Faker进行Symfony2 API测试POST

时间:2016-04-13 15:08:50

标签: api symfony yaml fixtures alice

我正在使用Symfony2构建REST API。我已经将Liip bundleAliceFaker一起用于我的功能测试,以生成所有灯具。但是,当我想直接测试POST调用时,我没有遇到什么麻烦,因为POST数据中包含了很长的JSON,这使得我的函数很长,很难看而且不可读。

我决定将假JSON移出类,将它们转换为YAML文件,然后使用Symfony的解析器加载它们:

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结构中使用它们?

非常感谢! ;)

1 个答案:

答案 0 :(得分: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
);