2016-08-08 1 views
1

J'ai un modèle d'erreur personnalisé dans mes projets pour les exceptions 404, 403 et autres. Je veux créer un cas de test unitaire pour affirmer les erreurs http. Lorsque je me connecte avec l'utilisateur et que j'accède à la page autorisée du fournisseur, j'obtiens 403 accès refusé dans le navigateur mais dans le cas de test de l'unité, je reçois toujours une erreur de 404 pages non trouvées.Assert 403 Statut http refusé avec le cas de test PHPUnit

Voici mon scénario de test:

class ErrorExceptionTest extends WebTestCase 
{ 
    public function testAccessDeniedException() 
    { 
     $server['HTTP_HOST'] = 'http://www.test.com/'; 
     $client = static::createClient(array('debug' => false), $server); 
     $client->disableReboot(); 

     $session = $client->getContainer()->get('session'); 
     $firewall = 'main'; 

     $token = new UsernamePasswordToken('user', null, $firewall, array('ROLE_USER')); 

     $session->set("_security_$firewall", serialize($token)); 
     $session->save(); 

     $cookie = new Cookie($session->getName(), $session->getId()); 
     $client->getCookieJar()->set($cookie); 

     $client->request('GET', '/vendor/profile/edit'); 

     $this->assertEquals(403, $client->getResponse()->getStatusCode()); 
     $this->assertContains('Sorry! Access Denied', $client->getResponse()->getContent()); 
    } 
} 

Mon cas de test est échoué, lorsque j'imprime le contenu de la réponse, il affichera 404 modèle d'erreur.

Répondre

1

Contourné et trouvé le problème. Donc, ma solution n'est pas nécessaire d'utiliser l'hôte http.

public function testAccessDeniedException() 
{ 
    $client = static::createClient(array('debug' => false)); 

    $session = $client->getContainer()->get('session'); 
    $firewall = 'main'; 

    $token = new UsernamePasswordToken('user', null, $firewall, array('ROLE_USER')); 

    $session->set("_security_$firewall", serialize($token)); 
    $session->save(); 

    $cookie = new Cookie($session->getName(), $session->getId()); 
    $client->getCookieJar()->set($cookie); 

    $client->request('GET', 'fr/vendor/profile/edit'); 

    $this->assertEquals(403, $client->getResponse()->getStatusCode()); 
    $this->assertContains('Sorry! Access Denied', $client->getResponse()->getContent()); 
}