1

我有一些视图助手(crossmodule),它需要访问数据库。一个常见的例子是一个NotificationHelper,横跨多页打印出用户的通知:如何测试视图助手与数据库访问

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

虽然这是非常方便的,似乎很难做到的烟幕测试/使用AbstractHttpControllerTestCase控制器单元测试,因为帮助者总是希望访问数据库(他应该不会,如果他?)。所以为了防止这种情况,我需要嘲笑NotificationHelper。但这还不够,因为模拟会返回$this->notifications()null,因此render()会失败。

唯一的方法我可以想出,是:

  • 模拟的NotificationHelper
  • 所有依赖定义的NotificationHelper返回值,像(在这种情况下)__invoke()
  • 拆离RendererListener,但这会导致视图不会以任何方式进行测试(如果例如所有<? echo $this->url('route'); ?>仍然有效,则有时看来是有用的)

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

第三种方法带走了一些安慰,因为视图模板不会再被测试。

有没有更好的方法来做到这一点?或者整个过程是错误的?或者我完全认为这个想法是错误的?

回答

0

AbstractHttpControllerTestCase可用于功能测试,但不应该有助于实际的单元测试。

相关问题