3

PHP でテストするためのcodeceptionというクールなツールを見つけました。とても気に入っています。API テスト ケースを書き始めました。しかし、jsonペイロードをRESTサービスに投稿することに行き詰まっています。どうすればこれを実行できますか?

JSON ペイロードを受け入れる /order という REST エンドポイントがあります。このサービスは 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();

しかし、私のサービスはファイル形式ではなくjsonペイロードを受け入れるため、500内部サーバーエラーが発生します。

誰かが以前にこのようなことに取り組んだことがありますか?

前もって感謝します。

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 に答える