Enviaré un correo electrónico utilizando la clase CakeEmail en una acción de uno de mis controladores. Tengo una prueba de unidad para este controlador que funcionaba bien antes de agregar el código de correo electrónico. Después de añadir el correo electrónico que sale este error:Use una configuración de correo electrónico diferente durante la prueba de unidad en CakePHP
SocketException: Could not send email.
Esto se debe al hecho de que no tengo ninguna manera de enviar mensajes de correo electrónico de mi máquina local.
Así que pensé que tal vez una buena idea sería tener dos opciones de configuración diferentes dentro de la clase EmailConfig en Config/email.php (Similar a cómo funciona el archivo de configuración de la base de datos). El valor predeterminado con el transporte de correo y una prueba con el transporte de depuración. El problema con esto es que, a diferencia de la configuración de la base de datos, Cake no cambia automáticamente entre los dos durante la prueba.
Lo único que he pensado es agregar un constructor a la clase EmailConfig y probar si estamos realizando pruebas unitarias, pero no estoy seguro de cuál será el control.
Algo a lo largo de las líneas de esto:
class EmailConfig {
public $default = array(
'transport' => 'Mail'
);
public $test = array(
'transport' => 'Debug'
);
public function __construct() {
if ($isUnitTesting) {
$this->default = $this->test;
}
}
}
hubiera hecho mi manera sugerida por encima de ser una buena idea? Si no, ¿de qué otra manera puedo usar un transporte diferente para el correo electrónico durante la prueba unitaria?
Actualización - 4/10/2012
creo que iba de este por el camino equivocado. Si mira this answer parece que incluso la configuración $default
no está cargada de manera predeterminada, debe especificarla llamando al método CakeEmail::config()
o proporcionándolo en el constructor. Así que creo que esto me deja dos opciones ahora: (? De alguna manera)
- en la comprobación de controlador si tenemos pruebas unitarias y luego usar la configuración de 'prueba'.
- Configurar mi computadora para poder enviar correos electrónicos.
prefiero hacerlo al principio, pero no está seguro de cómo esto se puede hacer sin inflar la acción del controlador con cheques si tenemos pruebas de unidad, parece incorrecta de hacer esto.
Simplemente configure la configuración en 'setUp' en su caso de prueba. Para tu información, Cake viene con un 'DebugTransport' que puedes usar en tu configuración de configuración que hará todo excepto enviar, y devolverá los encabezados y mensajes para que los uses en tus pruebas. Súper útil :) – jeremyharris
Sus problemas pueden ser más grandes que la prueba. Los correos electrónicos fallan regularmente en la vida real; asegúrese de que el código sea responsable de eso. Yo 1) me aseguraría de que existan pruebas para correos electrónicos exitosos y fallidos y 2) trate de usar un objeto falso de CakeEmail. No estoy seguro de cómo harías para hacer # 2; de lo contrario, respondería. –
@jeremyharris Ya sabía sobre el DebugTransport, de hecho, estaba buscando maneras en que podría ser utilizado en lugar del MailTransport. ¿Sería capaz de ampliar sobre cómo configurar la configuración en la configuración, no pude entender cómo podría funcionar. – Josh