重置Zend Framework中的所有视图助手

时间:2011-02-22 19:21:49

标签: php unit-testing zend-framework view-helpers

有没有办法重置所有视图帮助程序的状态,例如删除添加了headScript()的所有脚本?即使我正在为每个测试创建一个新的控制器和视图,下面的单元测试也会看到在一个单元测试中添加的脚本和元标记。这导致误报和否定。

2 个答案:

答案 0 :(得分:4)

看一下这些容器的抽象类(Zend_View_Helper_Placeholder_Container_Abstract),我看到它扩展了ArrayObject。只要你set它用一个包装你设置的值的数组替换该Array的值。当您append时,它会获取旧值并将新值移到数组上。因此,从理论上讲,您可以使用exchangeArray方法通过传递空白数组(完全未经测试)来清除任何值:

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

答案 1 :(得分:3)

Marcin的评论让我了解了测试框架中问题的根本原因,即在运行注册表快照的代码之前,将占位符注册表添加到Zend注册表中。因此,当删除所有新注册表对象的代码运行时,它不再删除占位符注册表。

要重置所有基于占位符的视图助手的状态,请使用以下命令:

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