2014-05-06 14 views
6

Ho un modello di ramoscello con {{ app.user }}. Il problema è che in un test phpunit (una classe che estende WebTestCase) è definito come NULL. Simulare l'autenticazione con un token (http://symfony.com/doc/current/cookbook/testing/simulating_authentication.html) o simulare l'autenticazione HTTP (http://symfony.com/doc/current/cookbook/testing/http_authentication.html) non aiuta. Quindi, come posso impostare una variabile globale di ramoscello da un test phpunit? E perché simulare l'autenticazione non funziona in questo caso?Symfony2 accesso a variabili globali da un modello di ramoscello nel test phpunit

+0

versioni: symfony: 2.3.2 phpunit: 4.0.19 php: 5.5.6 – Phantom

risposta

5

ho avuto un problema simile (login correttamente) che cosa ha risolto finalmente per me è stato quello di cambiare il mio modo di login (si basa su http://symfony.com/doc/current/cookbook/testing/simulating_authentication.html ma gestire la sessione in modo diverso):

public function setUp() { 
    parent::setUp(); 

    $this->em = $this->get('doctrine')->getManager(); 
    $this->client = static::createClient(array('environment' => 'test')); 
} 

protected function logIn() { 
    $repo = $this->em->getRepository('XXXXXXX'); 
    $user = $repo->findOneByUsername('YYYYYYY'); 

    $session = new Session(new MockFileSessionStorage()); 
    $firewall = 'main'; 
    $token = new UsernamePasswordToken($user, null, $firewall, array('ROLE_ADMIN')); 
    $this->client->getContainer()->get('security.context')->setToken($token); 
    $session->set('_security_' . $firewall, serialize($token)); 
    $session->save(); 

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

    return $user; 
} 
+0

Grazie! Ha funzionato per me, ma ho anche aggiunto una riga '$ this-> client-> getContainer() -> get ('security.context') -> setToken ($ token);' – Phantom

+0

Aveva lo stesso problema ma tutto Avevo bisogno di cambiare nell'esempio dai documenti di Symfony è di passare all'intero '$ user'object come primo parametro per il costruttore' UsernamePasswordToken', invece del solo nome utente. Ma questa soluzione mi ha aiutato a capirlo, quindi grazie mille! – Koen

Problemi correlati