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());
?>

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <php>.

Plus d'informations sur les options de formatage

CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.