2009-09-22 59 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