Question

J'écris des tests pour mon projet actuel, réalisé avec Zend Framework. Tout va bien, mais j'ai un problème pour tester les actions / contrôleurs des utilisateurs enregistrés: je dois être connecté pour pouvoir exécuter l'action / le contrôleur.

Comment puis-je être connecté à PHPUnit?

Était-ce utile?

La solution

Comme vous dites vouloir tester les actions / contrôleurs, je suppose que vous n’écrivez pas des tests unitaires, mais des tests fonctionnels / d’intégration, c’est-à-dire que vous travaillez avec Zend_Test et que vous testez via le MVC.

Voici une fonction de test que j'ai utilisée dans un projet, où je teste si la connexion est correcte:

public function testLoggingInShouldBeOk()
{
    $this->dispatch('/login/login');
    $csrf = $this->_getLoginFormCSRF();
    $this->resetResponse();
    $this->request->setPost(array(
        'login' => 'LOGIN',
        'password' => 'PASSWORD',
        'csrfLogin' => $csrf,
        'ok' => 'Login',
    ));
    $this->request->setMethod('POST');
    $this->dispatch('/login/login');
    $this->assertRedirectTo('/');
    $this->assertTrue(Zend_Auth::getInstance()->hasIdentity());
}

Simplement: je charge le formulaire de connexion, extrait le jeton CSRF, le remplit et le publie.

Ensuite, je peux tester si je suis connecté.


Avec cela, vous pouvez probablement extraire la partie de connexion, pour l'appeler avant chacun de vos tests nécessitant la connexion d'un utilisateur valide.

Autres conseils

Il existe un autre moyen. Sur mon entité Utilisateur , j'ai une méthode login () qui place l'identifiant de l'utilisateur dans la session et une variable statique. Ce que je viens de faire dans le test setUp () est d'appeler $ user- > login () et cela fonctionne. Dans les environnements de test, les sessions ne sont pas utilisées (la définition de Zend_Session :: $ isUnitTested = true a cet effet) et les tests reposent sur la variable statique. N'oubliez pas d'effacer la variable statique ( logout () de l'utilisateur) sur tearDown () .

Je pense que cet article pourrait vous aider: http://perevodik.net/fr/posts/7/ Il décrit comment créer une fausse identité que vous pouvez utiliser pour définir l'environnement dans un état équivalent à celui d'un utilisateur connecté.

De la même manière, Pascal utilise cette fonction:

$this->_getLoginFormCSRF();

J'ai créé une fonction générique qui renvoie la valeur en chargeant le formulaire à l'aide du gestionnaire d'éléments de formulaire:

  

fonction publique _getCSRFHashValueFromForm ($ formAlias, $ csrfName) {       $ form = $ this- > servicemanager- > get ('FormElementManager') - > get ($ formAlias);       return $ form- > get ($ csrfName) - > getValue (); }

Bien entendu, cela suppose que la CSRF est liée au formulaire et non à un ensemble de champs, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top