Comment se connecter à l'intérieur des tests pour pouvoir faire des actions spécifiques à l'utilisateur? P>
5 Réponses :
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; }
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 } }
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: p> 2- Déclarez ensuite un test comme suit: p> 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: p>
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);
Bonjour, j'aime votre solution .. Pourriez-vous coller dans une partie de votre sécurité.
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. P>