3

我发现了这个很酷的工具,叫做codeception,用于在 PHP 中进行测试。我非常喜欢它。我开始编写 API 测试用例。但我被困在将 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 有效负载而不是文件形式。

以前有人做过这样的事情吗?

提前致谢。

4

3 回答 3

3

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

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

它绝对应该工作。

于 2014-08-05T06:21:19.070 回答
1

我这样做了

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

$json = json_encode($exampleData);

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

有关更多详细信息,请参阅此Github 问题

于 2014-10-30T08:08:27.627 回答
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');

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

于 2013-11-27T12:31:02.347 回答