PHPUnitで標準出力を取得する
リクエストに対するレスポンスを返す際に、echoでXML文字列を返すというAPIがあり、
Unitテストを作る際に戻り値が取得できず、少々はまったのでメモ。
知っていればどうってことない話ではあります。
ob_start、ob_get_clean関数を用いることで実現しました。
// リクエスト用のヘッダーを生成 $this->configRequest(['headers' => ['Content-Type' => 'application/x-www-form-urlencoded']]); // 標準出力を読み取り開始 ob_start(); // リクエスト xmlはパラメータ $this->post('/your-api/path', ['xml' => $request]); // 標準出力受取 $actual = ob_get_clean(); // XMLオブジェクト化 $actual = simpleXML_load_string(stripslashes($actual)); // HTTPレスポンス確認(CakePHPのIntegrationTestCaseを使用) $this->assertResponseOk(); // XML文字列を標準出力 echo (string)$actual->asXml(); // ルートノードの名称確認 $this->assertTrue($actual->xpath("/ROOTNODE") != false);