2012-05-20 25 views
6

yılında alt alan bazlı yolları test edin.Ben ajanslara yönlendirmek için alt etki alanları kullanan bir uygulamaya sahip Symfony2'de

OnDomainParse olayını dinleyen ve alt etki alanını istek özniteliklerine yazan bir dinleyicim var.

/** 
* Listens for on domainParse event 
* Writes to request attributes 
*/ 
class SubdomainListener { 
    public function onDomainParse(Event $event) 
    { 
     $request = $event->getRequest(); 
     $session = $request->getSession(); 
     // Split the host name into tokens 
     $tokens = $this->tokenizeHost($request->getHost()); 

     if (isset($tokens['subdomain'])){ 
      $request->attributes->set('_subdomain',$tokens['subdomain']); 
     } 

    } 
    //... 
} 

Sonra bir gösteri eylemi yönlendirmeye denetleyicisi bu kullanın:

class AgencyController extends Controller 
{ 

    /** 
    * Lists all Agency entities. 
    * 
    */ 
    public function indexAction() 
    { 
     // We reroute to show action here. 
     $subdomain = $this->getRequest() 
         ->attributes 
         ->get('_subdomain'); 
     if ($subdomain) 
      return $this->showAction($subdomain); 


     $em = $this->getDoctrine()->getEntityManager(); 

     $agencies = $em->getRepository('NordRvisnCoreBundle:Agency')->findAll(); 

     return $this->render('NordRvisnCoreBundle:Agency:index.html.twig', array(
      'agencies' => $agencies 
     )); 
    } 
    // ... 

} 

Sorum şu:

nasıl Sahte bu WebTestCase bir test yaparken?

cevap

7

Ziyaret sağ sayfa için istek ve test için HTTP başlıklarını geçersiz kılarak alt alan:

Untested, hataları

class AgencyControllerTest extends WebTestCase 
{ 
    public function testShowFoo() 
    { 
     $client = static::createClient(); 

     $crawler = $client->request('GET', '/', array(), array(), array(
      'HTTP_HOST'  => 'foo.domain.dev', 
      'HTTP_USER_AGENT' => 'Symfony/2.0', 
     )); 

     $this->assertGreaterThan(0, $crawler->filter('html:contains("Text of foo domain")')->count()); 
    } 
} 
ana bilgisayar tabanlı yolları üzerinde Symfony'nin dokümanlar dayanarak
+0

Ah, aynı zamanda [docs] (http://symfony.com/doc/current/book/testing.html#testing-configuration) dizinindeydi. Teşekkürler – max

7

içerebilir Testing your Controllers:

$crawler = $client->request(
    'GET', 
    '/', 
    array(), 
    array(), 
    array('HTTP_HOST' => 'foo.domain.dev') 
); 

Eğer yastığa dizi parametreleri ile tüm isteklerinizi istemiyorsanız, t onun daha iyi olabilir: Değiştirmek birkaç parametre bir varsa, aynı zamanda istemci üzerinde bir setServerParameters() yöntemi var

$client->setServerParameter('HTTP_HOST', 'foo.domain.dev'); 
$crawler = $client->request('GET', '/'); 

... 

$crawler2 = $client->request('GET', /foo'); // still sends the HTTP_HOST 

.