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可用於功能測試,但不應該有助於實際的單元測試。

相關問題