Ç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..
Abonnement Fil RSS
Salut,
Ça a nécessité quelques adaptations pour Symfony 1.4, mais ce fut trés utile, merci.
[...] Некоторые материалы по теме: раз, два, три, четыре, пять. [...]
Bonjour,
Très utile comme outil, et surtout complet
Attention cependant à un caractère ligne 30, qui devrait être : with(‘request’)->begin()->
Egalement, comme l’a dit thibault, il faut l’adapter pour symfony 1.4. La fonction isRedirected se trouve dorénavant dans la classe sfTesterResponse, ce qui devient :
with(‘response’)->begin()->
isRedirected()->
end()