テストでメールを送信せずに、CakeEmailでのレンダリング内容を取りたい場合は、
// モックを作成
$CakeEmail = $this->getMock('CakeEmail', array('transportClass'));
$CakeEmail->expects($this->any())->method('transportClass')
->will($this->returnValue(new DebugTransport()));
// CakeEmailのMockをセット
$TestTarget->CakeEmail = $CakeEmail;
// ... $TestTargetを使った何らかのメール送信を含む処理
// text形式のメッセージを取得
$bodyText = $CakeEmail->message(CakeEmail::MESSAGE_TEXT);
// html形式のメッセージを取得
$bodyHtml = $CakeEmail->message(CakeEmail::MESSAGE_HTML);
// ... 適宜、値チェック
てな感じで、CakeEmail::transportClass()をスタブ化してDebugTransportを返すようにする。で、CakeEmail::message()でbodyを取得する。
と、去年の7月に書いたメモがあったのでとりあえず公開。
追記:
CakeEmail::transport()でdebugを指定すればいいじゃないかとも思ったけど、テスト対象の何らかの処理の中でtransportを変更していたらアレなのでやっぱりtransportClassをスタブ化するのが確実でよい。