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);
這是徒勞的,因爲這現在住在控制器服務經理,而對一個似乎與視圖催生。不幸的是,該視圖在它出去之前就創建了一個新的服務實例,並查看其對等實例。
那麼,那麼,有關如何有效地嘲笑這一點的任何想法?
你可以嘲笑服務管理器返回一個模擬服務之前嘲笑助手,並在對象上調用setServiceManager($ your_mock_service_manager)? – STLMikey