Звучит достаточно просто, но я не могу понять, как передать данные в указанный ниже почтовый ящик для тестирования. Он отлично работает при нормальном использовании.
Работает через контроллер
Mail::to($user)->send(new C2cMail($this->commitment->data, \App\EModule::findOrFail($this->commitment->module_id), $user));
Отправляем по почте
public function __construct($commitment, Module $module, User $user)
{
$this->commitment = unserialize($commitment);
$this->module = $module;
$this->user = $user;
$this->title = $this->module->title;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
try {
if (empty(env('MAIL_FROM')) || !env('MAIL_FROM') || env('MAIL_FROM') == null){
throw new \Exception("You must set your MAIL_FROM environment variable", 406);
}
$this->from(env('MAIL_FROM'))->subject('First email test')->view('mail.c2c-1');
} catch (\Exception $e) {
\Log::error($e->getMessage());
}
}
Итак, все работает нормально, но я не могу получить модульный тест для передачи данных в почтовый конструктор.
Прецедент
public function testC2cEmailSend()
{
Mail::fake();
// Grab any old C2C entry
$c2c = \App\Commitment::with(['module', 'user'])->first();
$data = $c2c->data;
$user = $c2c->user;
$module = $c2c->module;
$mailable_data = ['data' => $data, 'user' => $user, 'module' => $module];
Mail::assertSent(C2cFirst::class, function($mail) use ($mailable_data) {
return $mail->hasTo($mailable_data['user']->email);
});
}
Самостоятельно решен
Это было неправильное понимание того, как на самом деле работает Mail::fake()
. Он захватывает класс Mail
и заменяет его экземпляром MailFake
; и поэтому размещение его над желаемой функциональностью предотвращает фактическую отправку.
@YevgeniyAfanasyev Верно
тогда это должен быть не вопрос "почтового теста", а скорее вопрос "тестового почтового сообщения".
Что ж, я не веду дневник, этому вопросу больше двух лет, а вы ломаете голову над проблемой, которая меня больше не волнует.
Mail :: fake () не проверяет наличие проблемы внутри электронной почты. Mailable-> build () никогда не выполняется, а почтовый ящик никогда не создается.