如何使用数据库访问测试视图助手

时间:2013-12-14 16:22:46

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

我有一些需要访问数据库的视图助手(crossmodule)。一个常见的示例可能是NotificationHelper,它会在多个页面上打印出用户通知:

<div class="notifications">
<?php echo $this->notifications()->render(); ?>
</div>

虽然这非常方便,但使用AbstractHttpControllerTestCase对控制器进行烟幕测试/单元测试似乎非常困难,因为Helper总是希望访问数据库(他显然不应该这样做,他应该这样做吗? )。所以为了防止这种情况,我需要模仿NotificationHelper。但这还不够,因为模拟将返回$this->notifications()null,因此render()会失败。

我能提出的唯一方法是:

  • 模拟NotificationHelper
  • 的所有依赖项
  • 定义NotificationHelper的返回值,如(在本例中)__invoke()
  • 分离RendererListener,但这会导致视图无法以任何方式进行测试(例如,如果所有<? echo $this->url('route'); ?>仍有效,则有时可以查看。

前两种方法看起来非常臃肿,而且有些错误,因为我需要在每个ControllerTest中对每个Helper执行此操作。

第三种方法带来了一些安慰,因为视图模板不再受到测试。

有更好的方法吗?或者整个过程是错的?或者我的想法是完全错误的?

1 个答案:

答案 0 :(得分:0)

AbstractHttpControllerTestCase可以用于功能测试,但不应该用于真正的单元测试。