【问题标题】:Reset all view helpers in Zend Framework重置 Zend 框架中的所有视图助手
【发布时间】:2011-07-02 06:06:25
【问题描述】:

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

【问题讨论】:

  • 为什么不直接使用 phpunit 的 setup/teardown 方法(我假设你使用的是 ZF 的 phpunit)?
  • 您可以使用 Zend_Registry::_unsetInstance() 在您的拆卸方法中清理 Zend_Registry;
  • @prodigitalson - 是的,我们正在使用 PHPUnit,但问题是我不知道在 tearDown() 中添加什么来清除视图助手。
  • @Marcin - 我们已经有一个类可以从 Zend Registry 中清除任何新对象,但这导致了答案。谢谢!

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


【解决方案1】:

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

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

【讨论】:

  • 为每个基于占位符的视图助手执行此操作将是最后的手段,但感谢您的指点。那肯定会成功。
【解决方案2】:

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

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

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

【讨论】:

  • 这会破坏 所有 占位符。 IMO,先拍一点,然后再提问。
  • @JasonTFeatheringham - 这正是重点。每个单元测试都应该完全隔离运行,不受之前运行的测试的影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2011-03-25
  • 2012-06-02
  • 2011-01-21
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多