Más con Symfony

4.9. Pruebas

La integración de la librería no hubiera sido completa sin una forma sencilla de realizar pruebas con mensajes de correo electrónico. Para facilitar las pruebas con emails, symfony dispone de un tester denominado mailer (clase sfMailerTester).

El método hasSent() prueba el número de mensajes enviados durante la petición actual:

$browser->
  get('/foo')->
  with('mailer')->
    hasSent(1)
;

El código anterior comprueba que la URL /foo solamente envía un email.

Se pueden realizar pruebas más detalladas con cada email enviado gracias a los métodos checkHeader() y checkBody():

$browser->
  get('/foo')->
  with('mailer')->begin()->
    hasSent(1)->
    checkHeader('Asunto', '/Asunto/')->
    checkBody('/Cuerpo/')->
  end()
;

El segundo argumento de checkHeader() y el primero de checkBody() pueden ser cualquiera de los siguientes elementos:

  • Una cadena de texto, para realizar una comprobación exacta
  • Una expresión regular que debe cumplir el valor comprobado
  • Una expresión regular negativa (es decir, una expresión regular que empieza por el carácter !) que no debe cumplir el valor comprobado

Las comprobaciones siempre se realizan sobre el primer mensaje enviado. Si se han enviado varios mensajes, puedes elegir cual quieres comprobar mediante el método withMessage().

$browser->
  get('/foo')->
  with('mailer')->begin()->
    hasSent(2)->
    withMessage('[email protected]')->
    checkHeader('Asunto', '/Asunto/')->
    checkBody('/Cuerpo/')->
  end()
;

El método withMessage() toma como primer argumento un destinatario. Si se han enviado varios mensajes al mismo destinatario, también toma como segundo argumento el mensaje que se quiere probar.

Por último, el método debug() muestra toda la información sobre los mensajes enviados para detectar fácilmente la causa de los problemas:

$browser->
  get('/foo')->
  with('mailer')->
  debug()
;