2

CodeceptionがRESTモジュール、より具体的には「grabDataFromJsonResponse」メソッドを介してプルバックしている配列からキーを取得しようとしています。その配列から最初のキーを取得したいと思います。これは、grabDataFromJsonResponse 関数を使用すると、必要なデータのみを返すのに十分な範囲で選択できるためです。ただし、Codeception はそれをオブジェクトに変換するように見えるため、間違ったキーを取得します。以下はコードサンプルと、Codeception が返す配列オブジェクトのサンプル (上部) です。

 public function returningArrayKey(WebGuy $I)
{
    $I->sendPOST(mypostdata);
    $I->seeResponseCodeIs(200);
    $I->seeResponseContains("Success");
    $jsonListingObj = $I->grabDataFromJsonResponse("tree.traversing.traversed");
    $I->checkAgainstKey("123456789", key($jsonListingObj));

}

関数 checkAgainstKey は単に AssertEquals を実行します。

function compareListingId($listingId, $oJsonObjectData)
{
    $this->assertEquals($listingId, $oJsonObjectData);
}

ただし、最初のキーは次のとおりであるため、assertEquals は常に失敗します。

  Codeception\Maybe Object
  (
  [position:protected] => 0
  [val:protected] => Array
      (
          [123456] => Array
              (    etc.

上記のように key() を使用すると、'position:protected' が返されます。配列を掘り下げて 123456 を返すにはどうすればよいですか? 123456 で表される配列キーは、REST 応答に基づいて動的になります。

ありがとう!

4

1 に答える 1

1

最終的な解決策は、オブジェクトを配列としてキャストし、配列をスライスし (Codeception の Maybe オブジェクトを配列に変換すると、削除したいパブリック プロパティなどが追加されるため)、目的のキーをプルすることでした。

$jsonListingObj = $I->grabDataFromJsonResponse("tree.traversing.traversed");
$jsonListingArray = (array)$jsonListingObj;
$JSONParsed = key(current(array_slice($jsonListingArray, 1,1)));

上記の例では、$JSONParsed は '123456' を返します。

于 2014-04-04T17:21:05.950 に答える