Как отправить URL-адрес с поддоменом в тесте Zend PHPUnit Controller?

Я хочу протестировать свой контроллер, который работает на поддомене www.username.domain.com.

Проблема в том, что когда я отправляю в ControllerTestCase, он выдает Zend_Controller_Dispatcher_Exception


маршруты.php:

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

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

Усерконтроллертест:

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');
    }
}

Абстарктконтроллертесткейс:

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, такой как /login, он работает хорошо, но проблема заключается в отправке URL-адресов с именами хостов.

Есть идеи? Спасибо вам всем.


person Petr K.    schedule 22.09.2009    source источник
comment
Добавлены ли маршрутизатор и маршрут во FrontController в тестах? Взгляните на источник dispatch();, чтобы узнать, какие данные используются для диспетчеризации (например, имя хоста).   -  person takeshin    schedule 14.10.2010


Ответы (2)


Вы пытались установить переменную $_SERVER в настройках?

e.g.

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

а затем вызовите диспетчера, как обычно.

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

person Nomolos    schedule 14.10.2010
comment
Работал на меня. Было бы неплохо, если бы Zend_Controller_Request_HttpTestCase предоставлял метод setHost(). - person cope360; 16.12.2011

Определите $_SERVER['HTTP_HOST'] перед вызовом dispatch() .

Заявка с такой же проблемой уже есть на странице http://framework.zend.com/issues/browse/ZF-11680

person user1003039    schedule 22.05.2013