2009-09-22 8 views
2

Je veux tester mon contrôleur qui fonctionne sur un sous-domaine www.username.domain.comComment envoyer l'URL avec sous-domaine dans Zend PHPUnit Controller test?

Le problème est quand j'expédions en ControllerTestCase il jette 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(); 
    } 
(...) 
} 

Résultat:

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" 

Lorsque j'envoie URI normal comme/login il fonctionne bien, mais le problème est dispatching des URL avec des noms d'hôtes.

Des idées? Merci à tous.

+0

est le routeur et l'itinéraire ajouté à FrontController dans les tests aussi? Jetez un oeil à la source de 'dispatch();' pour voir quelles données sont utilisées pour l'envoi (par exemple, le nom d'hôte). – takeshin

Répondre

2

Avez-vous essayé de définir la variable $ _SERVER dans la configuration?

par exemple.

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

puis appelez dispatch comme d'habitude.

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

+0

A travaillé pour moi. Ce serait bien si Zend_Controller_Request_HttpTestCase fournissait une méthode setHost(). – cope360

Questions connexes