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执行此操作。
第三种方法带走了一些安慰,因为视图模板不会再被测试。
有没有更好的方法来做到这一点?或者整个过程是错误的?或者我完全认为这个想法是错误的?