2011-02-22 5 views
1

すべてのビューヘルパーの状態をリセットする方法がありますか?たとえば、headScript()で追加されたすべてのスクリプトを削除しますか? 1つのユニットテストで追加されたスクリプトとメタタグは、それぞれのテストで新しいコントローラとビューを作成していても、次のユニットテストで確認されています。これは偽陽性と陰性の原因となります。Zend Frameworkのすべてのビューヘルパーをリセットする

+0

なぜだけではなく、PHPUnitの(私はyoureのZFでのPHPUnitをisng仮定)のセットアップ/ティアダウンメソッドを使用します。

が、これは使用し、すべてのプレースホルダベースのビューヘルパーの状態をリセットするには? – prodigitalson

+0

Zend_Registry :: _ unsetInstance();を使用して、ティアダウンメソッドでZend_Registryをクリーンアップすることができます。 – Marcin

+0

@prodigitalson - はい、私たちはPHPUnitを使用していますが、問題はビューヘルパーをクリアするために 'tearDown()'に何を入れるべきか分かりません。 –

答えて

3

マルチンさんのコメントは、私たちのテストでは、問題の根本的な原因に私を導きましたこれは、レジストリのスナップショットを取得するコードが実行される前に、プレースホルダレジストリがZendレジストリに追加されていることを示しています。したがって、すべての新しいレジストリオブジェクトを削除するコードが実行されると、もはやプレースホルダレジストリが削除されなくなりました。

$registry = Zend_Registry::getInstance(); 
unset($registry['Zend_View_Helper_Placeholder_Registry']); 
+0

ニース、はるかに良い! – typeoneerror

+0

これは_all_プレースホルダを吹き飛ばします。ちょっと撮りなさい、後で質問する、IMO。 –

+0

@JasonTFeatheringham - それがポイントです。各単体テストは、前に実行したテストの影響を受けることなく、完全に分離して実行する必要があります。 –

4

これらのコンテナの抽象クラス(Zend_View_Helper_Placeholder_Container_Abstract)を見てみると、ArrayObjectが続きます。 setいつでも、配列の値を、設定した値をラップする配列に置き換えます。 appendを実行すると、古い値が取得され、新しい値が配列にシフトされます。だから、理論的には、空白の配列(完全にテストされていない)を渡すことで任意の値をクリアするためにexchangeArrayメソッドを使用することができるだろう:

$this->view->headScript()->exchangeArray(array()); 
+0

プレースホルダベースのビューヘルパーでこれを行うのは最後の手段でしたが、ポインタのおかげです。それは確かにそのトリックを行うだろう。 –

関連する問題