我发现这个很酷的工具名为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有效负载而不是文件形式。
之前有人曾经做过类似的事吗?
提前致谢。
答案 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');
现在进行构建并运行测试套件。你应该能够通过错误:)