我有一些需要访问数据库的视图助手(crossmodule)。一个常见的示例可能是NotificationHelper
,它会在多个页面上打印出用户通知:
<div class="notifications">
<?php echo $this->notifications()->render(); ?>
</div>
虽然这非常方便,但使用AbstractHttpControllerTestCase
对控制器进行烟幕测试/单元测试似乎非常困难,因为Helper总是希望访问数据库(他显然不应该这样做,他应该这样做吗? )。所以为了防止这种情况,我需要模仿NotificationHelper
。但这还不够,因为模拟将返回$this->notifications()
:null
,因此render()
会失败。
我能提出的唯一方法是:
NotificationHelper
NotificationHelper
的返回值,如(在本例中)__invoke()
<? echo $this->url('route'); ?>
仍有效,则有时可以查看。前两种方法看起来非常臃肿,而且有些错误,因为我需要在每个ControllerTest中对每个Helper执行此操作。
第三种方法带来了一些安慰,因为视图模板不再受到测试。
有更好的方法吗?或者整个过程是错的?或者我的想法是完全错误的?
答案 0 :(得分:0)
AbstractHttpControllerTestCase
可以用于功能测试,但不应该用于真正的单元测试。