2013-11-22 76 views
1

我試圖在具有使用視圖助手的視圖的控制器上運行單元測試。我可調用的是建立在幫助我的配置是這樣:如何在ZF2單元測試中模擬可調用?

<?php 
return [ 
    'invokables' => [ 
     'viewHelper' => 'Theme\View\Helper\ViewHelper', 
    ], 
]; 

在我的單元測試,我公司擁有一批在設置嘲笑服務的()。

<?php 

namespace Blargle\Controller; 

class ActivityControllerTest extends AbstractZendHttpControllerTestCase 
{ 
    /** 
    * Someone set up us the bomb. 
    */ 
    public function setUp() 
    { 
     parent::setUp(); 

     $mockActivityRepository = $this->getMock('Domain\Repository\Blargle\ActivityRepositoryInterface'); 
     $this->serviceManager->setService('Blargle\ActivityRepository', $mockActivityRepository); 
    } 

    /** 
    * Test Add Action 
    */ 
    public function testAddAction() 
    { 
     $this->createIdentity(); //Sets up the logged in user. 

     $this->dispatch('/blargle/activity/add/1'); 
     $this->assertResponseStatusCode(200); 

     $this->assertModuleName('blargle'); 
     $this->assertControllerName('Blargle\Controller\Activity'); 
     $this->assertControllerClass('ActivityController'); 
     $this->assertMatchedRouteName('blargle/activity'); 

     $mvcEvent = $this->getApplication()->getMvcEvent(); 
     $viewModel = $mvcEvent->getResult(); 

     $this->assertInstanceOf('Zend\View\Model\ViewModel', $viewModel); 
     $this->assertEquals($viewModel->getTemplate(), 'blargle/activity/add'); 
    } 
} 

所以,我現在需要模擬的是被通過視圖加載可調用,但服務管理器視圖依賴是聯繫在一起的視圖。我已經試過:

$mockHelper = $this->getMock('Theme\View\Helper\ViewHelper'); 
$this->serviceManager->setService('viewHelper', $mockHelper); 

這是徒勞的,因爲這現在住在控制器服務經理,而對一個似乎與視圖催生。不幸的是,該視圖在它出去之前就創建了一個新的服務實例,並查看其對等實例。

那麼,那麼,有關如何有效地嘲笑這一點的任何想法?

+0

你可以嘲笑服務管理器返回一個模擬服務之前嘲笑助手,並在對象上調用setServiceManager($ your_mock_service_manager)? – STLMikey

回答

0

只要確保調度您的要求:)

​​
相關問題