9
votes

Symfony2 Login FOS UserBundle dans des tests fonctionnels

Comment se connecter à l'intérieur des tests pour pouvoir faire des actions spécifiques à l'utilisateur?


0 commentaires

5 Réponses :


0
votes

Voici comment je l'ai mis en œuvre pour l'un des projets (pas avec FosuserBundle, mais vous le trouverez probablement utile)

private function createAuthorizedClient($role)
{
    $userProvider = new YourUserProvider(...);
    $user = $userProvider->createUserMethod(...);

    $client = $this->createClient(); //Normal WebTestCase client
    $client->getCookieJar()->set(new Cookie(session_name(), true));
    $session = self::$kernel->getContainer()->get('session');
    $token =  new UsernamePasswordToken($user, 'password', 'main', array($role));
    $client->getContainer()->get('security.context')->setToken($token);
    $session->set('_security_main', serialize($token));

    return $client;
}


0 commentaires

5
votes

En réalité, l'authentification doit être faite comme un véritable utilisateur le faire. Dans ce cas, vous devez connaître le mot de passe simple et remplir le formulaire de connexion

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class XXX extends WebTestCase {
  public function testUserLogin() {

   $client = static::createClient();
   $crawler = $client->request('GET', '/login');

   $form = $crawler->selectButton('_submit')->form(array(
     '_username'  => 'user',
     '_password'  => 'pa$$word',
   ));

   $client->submit($form);
   $crawler = $client->followRedirect(); // "/" page

   // if credentials were correct, you should be logged in and ready to test your app
  }
}


0 commentaires

2
votes

Je sais que c'est trop tard .. Mais au cas où quelqu'un en a besoin, j'ai réussi à loger un utilisateur dans mon test de l'unité, comme celui-ci:

1- Définissez d'abord une classe qui vous donnera accès aux services: xxx

2- Déclarez ensuite un test comme suit: xxx

Ceci est un exemple complet pour tester la création de Menubuilder, mais bien que un peu hors de portée, cet extrait devrait répondre à votre besoin: xxx


0 commentaires

4
votes

Les réponses existantes à cette question ont été utiles, mais aucune d'entre elles n'a résolu mon problème directement. J'utilise Symfony 2.3.

Voici ma solution: p>

$client = static::createClient();
$client->getCookieJar()->set($this->cookie);


1 commentaires

Bonjour, j'aime votre solution .. Pourriez-vous coller dans une partie de votre sécurité.



0
votes

Puisque je ne peux pas commenter votre solution, je dois créer une nouvelle réponse. En réalité, les autres solutions sont correctes en ce sens qu'ils utilisent un test fonctionnel pour tester un scénario spécifique. Vous utilisez un test unitaire pour tester un scénario qui appartient à un test fonctionnel, pourquoi vous avez dû pirater la connexion à l'utilisateur. Veuillez considérer les autres solutions et effectuer un test fonctionnel en cochant l'objet DOM pour les éléments de menu appropriés.


0 commentaires