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);