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執行此操作。
第三種方法帶走了一些安慰,因爲視圖模板不會再被測試。
有沒有更好的方法來做到這一點?或者整個過程是錯誤的?或者我完全認爲這個想法是錯誤的?