Ожидаемое почтовое сообщение [App \ Mail \ WelcomeEmail] не было отправлено. Не удалось подтвердить, что ложь истинна - PullRequest
1 голос
/ 19 июня 2020

Где я делаю ошибку? Код удара не работает для тестирования. Пользователь найден. Нет такой проблемы, как пользователь null.

Сообщение об ошибке:

The expected [App\Mail\WelcomeEmail] mailable was not sent. Failed asserting that false is true.

   at vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php:64
  60|         }
  61| 
  62|         PHPUnit::assertTrue(
  63|             $this->sent($mailable, $callback)->count() > 0,
> 64|             $message
  65|         );
  66|     }
  67| 

Тестовый класс

class MailTest extends TestCase
{
    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testWelcomeMail()
    {
        $this->withoutExceptionHandling();
        Mail::fake();

        Mail::assertSent(WelcomeEmail::class);
    }
}

Класс почты

class WelcomeEmail extends Mailable
{
 use Queueable, SerializesModels;

 public $data;

 public function __construct($data)
 {
    $this->data = $data;
 }

 public function build()
 {
    $user = User::find(3425);

    $address = 'myjourney@asdasd.com';
    $subject = __('email.welcome_to_journey');
    $name = __('email.my_journey');

    if ($user != NULL) {
        \App::setLocale($user->lang);
        $user->is_welcome_email_sent = 1;
        $user->save();

    }

    return $this->view('email.user_welcome', ['user' => $user])
        ->from($address, $name)
        // ->cc($address, $name)
        // ->bcc($address, $name)
        ->replyTo($address, $name)
        ->subject($subject);
 }
}

Я могу работать с другими тестовыми файлами, такими как логин, регистрация и т. Д. c, но рассылка не работает.

Ответы [ 2 ]

1 голос
/ 26 июня 2020

Вы не отправляете электронное письмо вместе с другими учетными данными. Ваша функция должна выглядеть так

public function testWelcomeMail()
{
    $this->withoutExceptionHandling();
    Mail::fake();
    Mail::to('<email_address>')->send(new WelcomeEmail(['user' => <some_number>]));
    Mail::assertSent(WelcomeEmail::class);
}
0 голосов
/ 19 июня 2020

Существует ли на самом деле пользователь с идентификатором 3425?

$user = User::find(3425);

Здесь может произойти сбой вашего кода, поскольку мы не можем получить lang из нулевого объекта. Эту строку, вероятно, следует удалить, поскольку она уже используется в строке ниже, где вы проверяете, существует ли пользователь.

\App::setLocale($user->lang); 

Также похоже, что ваш шаблон электронной почты использует данные от пользователя $ user, поскольку пользователь объект передается в шаблон. Это также может сломаться, если вы ожидаете, что пользователь существует.

...