Zend Framework : tester l'envoi d'un E-mail

Logo Zend Framework

Pour s'assurer qu'un message E-mail est bien envoyé, il faut utiliser un objet factice (mock) qui va simuler le comportement d'un objet réel. Avec le Zend Framework, l'envoi des courriers électroniques est effectué par l'intermédiaire d'un composant dérivé de Zend_Mail_Transport_Abstract. Il suffit donc de créer une nouvelle classe basée sur cette dernière et de stocker les messages dans un tableau :

<?php
class Wiip_Mail_Transport_Mock extends Zend_Mail_Transport_Abstract
{
    
/**
     * @var array
     */
    
public $messages = array();

    public function 
_sendMail()
    {
        
$this->messages[] = $this->_mail;
    }
}
?>

Ensuite, on crée une instance de cette classe et on l'utilise en tant que transport par défaut. On place également une référence dans le registre pour pouvoir le récupérer dans n'importe quelle partie de l'application.

<?php
// Dans le bootstrap de vos tests
$mock = new Wiip_Mail_Transport_Mock();
Zend_Registry::set('Wiip_Mail_Transport_Mock'$mock);
Zend_Mail::setDefaultTransport($mock);
?>

Pour tester que l'E-mail a été correctement envoyé, il suffit de s'assurer qu'il est bien présent dans le tableau messages de notre objet mock. On peut également tester les propriétés de l'objet Zend_Mail avec les différentes assertions fournies par PHPUnit.

<?php
// On envoie le message

// On récupère l'objet factice et on accède aux différents messages qu'il contient
$mock Zend_Registry::get('Wiip_Mail_Transport_Mock');
$this->assertEquals(1count($mock->messages));
$this->assertContains('john.doe@somewhere.com'$mock->messages[0]->getRecipients());
?>

Ajouter un commentaire