Ça y’est, vous êtes en train d’écrire vos tests fonctionnels pour votre application Symfony. MAIS votre application – ou une partie – nécessite une identification de la part de l’utilisateur. Il y a bien sûr la solution qui consiste à systématiquement remplir le formulaire dans chaque fichier de test.
Je vous présente ici une solution pour palier à cela. La solution consiste à étendre la classe sfTestFunctional du framework. Ce qui donne, par exemple :
class sfGuardTestFunctional extends sfTestFunctional { public function __construct($browser, $lime = null, $testers = array()) { parent::__construct($browser, $lime, $testers); $this->signin(array('username' => 'foo', 'password' => 'bar')); } /** * Perform user authentication * * @param array of String $user_data * @return sfGuardTestFunctional $this */ public function signin($user_data) { return $this->info(sprintf('Login as "%s"', $user_data['username']))-> get('/admin/login')-> click("S'identifier", array('login' => $user_data))-> with('form')->begin()-> hasErrors(false)-> end()-> with('user')->begin()-> isCulture('fr_FR')-> isAuthenticated(true)-> end()-> with('request')->begin()-> isParameter('module', 'admin')-> isParameter('action', 'login')-> end()-> isRedirected()-> followRedirect(); } }
De cette manière, dans votre fichier de test il vous suffira d’instancier votre browser avec votre nouvelle classe :
$browser = new sfGuardTestFunctional(new sfBrowser('my_vhost'));
Et voilà, vous pouvez vous considérer comme identifié et écrire directement vos tests fonctionnels ! La solution présentée ici est minimale, la mise en forme du code PHP avec Blogspot n’étant pas des meilleure et votre motivation étant sans doute plus grande à déchiffrer 20 lignes de code plutôt que 42.
Une petite mise en oeuvre de ce cette classe, mise en place au sein de Piwam. L’exemple est destiné à la version 1.2 du framework..