Codeception API测试:坚持将json有效负载传递给REST服务

时间:2013-08-08 13:19:51

标签: laravel-4 codeception

我发现这个很酷的工具名为codeception,用于在PHP中进行测试。我很喜欢它。我开始编写API测试用例。但我坚持将POST的json有效负载发送到REST服务。我怎么能这样做?

我有一个名为/ order的REST端点,它接受JSON有效负载。该服务建立在Laravel4上,因此我使用Input :: json() - > all()接受Laravel4中的有效负载。

我尝试过这样的事情

$filename = __DIR__.'/createOrder.json';
$I->haveHttpHeader('Content-Type', 'application/json');
**$I->sendPOST('order', null, array($filename));**  
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();

但它给了我500个内部服务器错误,因为我的服务接受json有效负载而不是文件形式。

之前有人曾经做过类似的事吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

我知道这是一个古老的问题,但对于其他偶然发现此问题的人,请尝试:

$I->haveHttpHeader('Content-Type','application/json');

它绝对应该有用。

答案 1 :(得分:1)

我这样做了

$exampleData = [
    'name' => 'adam',
    'age' => 99
];

$json = json_encode($exampleData);

$I->sendPOST('/endpoint', $json);

有关详细信息,请参阅此Github issues

答案 2 :(得分:0)

@ Sameer,我尝试过并遇到过类似的问题。然后,我为此工作了。

$filename = __DIR__.'/createOrder.json';
$I->sendPOST('order', getPostParams($filename));

现在在套件中创建一个名为“helpers”的新文件夹,并向其添加"<suiteName>Helper.php"

在那里添加以下代码

function getPostParams($filename){
        if(!file_exists($filename)){
            print "MISSING FILE     ".$filename."\n";
            return;
        }
        $jsonData= json_decode(file_get_contents($filename));
        if(!$jsonData){
            print "INVALID JSON CONTENT     ".$filename."\n";
            return;
        }   

        return (array)($jsonData);
    }

转到_bootstrap.php文件夹中的"tests"并添加此

require_once('<suiteName>/helpers/<suiteName>Helper.php');

现在进行构建并运行测试套件。你应该能够通过错误:)