2009-09-22 57 views
2

我想測試我的控制器,在子域www.username.domain.com工作如何在Zend PHPUnit Controller測試中用subdomain調度url?

問題是,當我在ControllerTestCase派遣它拋出Zend_Controller_Dispatcher_Exception


routes.php文件:

$userRouter = new Zend_Controller_Router_Route_Hostname(':user.domain.com')); 

$router->addRoute('user', $userRouter->chain(new Zend_Controller_Router_Route('', 
          array('controller' => 'user')))); 

UserControllerTest:

require_once 'AbstarctControllerTestCase.php'; 

class UserControllerTest extends AbstarctControllerTestCase 
{ 
    public function setUp() 
    { 
     $this->cleardb(); 
     parent::setUp(); 
    } 

    public function testRoute() 
    { 
     $this->dispatch('www.username.domain.com'); 
     $this->assertController('user'); 
    } 
} 

AbstarctControllerTestCase:

abstract class AbstarctControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public function setUp() 
    { 
     $this->bootstrap = array($this, 'appBootstrap'); 
     parent::setUp(); 
    } 

    public function appBootstrap() 
    { 
     chdir(dirname(dirname(dirname(dirname(__FILE__))))); 
     require 'application/test/controllerunit/routes.php'; 
     Zend_Session::start(); 
    } 
(...) 
} 

結果:

PHPUnit 3.3.17 by Sebastian Bergmann. 

F 

Time: 1 second 

There was 1 failure: 

1) testRoute(UserControllerTest) 
Failed asserting last controller used was "user" 

當我派遣正常URI像/登錄它的工作很好,但問題是與主機名調度的URL。

任何想法? 謝謝大家。

+0

下同樣值得關注的是路由器和路由添加到FrontController在測試嗎?看看'dispatch();'的來源,看看哪些數據用於分派(例如主機名)。 – takeshin 2010-10-14 06:35:12

回答

2

您是否嘗試在設置中設置$ _SERVER變量?

例如

$_SERVER['SERVER_NAME'] = 'www.username.domain.com'; 

然後按照慣例調用調度。

見 - http://php.net/manual/en/reserved.variables.server.php

+0

爲我工作。如果Zend_Controller_Request_HttpTestCase提供了setHost()方法,那將會很好。 – cope360 2011-12-15 21:14:05