Yii PHP フレームワークは多くの面で非常に優れていますが、シミュレートされたコントローラー アクションの出力テストを内部的にサポートしていないのは非常に残念です。Selenium ベースの Web ブラウザ メソッドしかありません。私は ZendF から Yii に来ましたが、zend には xpath ベースのアサーションを含む優れたテスト システムがあります。そのため、コード フローを理解し、components/Controller.php 内でこれをコーディングする必要がありました。私の意見では、Yii の魅力である中核となる yii フレームワークを変更せずにそれを行うことができました。
すべてのクライアント コードには、Yii のすべてのコントローラに共通の基本クラスである components/Controller.php があります。render は CController メソッドです。つまり、それをオーバーライドして、ユニット テスト コードで使用するビュー出力をキャプチャできます。
テストランかプロダクションかを識別するには、runmode パラメータ (config/main.php 内) が必要です。テスト実行では何もエコーできませんが、本番出力では単純にエコーされます(ユニットテストレポートが台無しになります)。テスト コードでは、ラッパーの xpath または strpos チェックをアサートできる $render_output で出力を取得します。このハックは最高ではありませんが、うまく機能します。
function render($view,$data=null,$return=false)
{
$out = parent::render($view,$data,true);
if(isset(Yii::app()->params['runmode'])
&& Yii::app()->params['runmode'] == 'test')
{
global $render_output;
return $render_output = $out;
}
if($return)
return $out;
else
echo $out;
}