Вы получили эту ошибку, потому что адрес электронной почты для сброса пароля - Notification
, а не Mailable
. Обратите внимание, что вы также должны сохранить поддельного пользователя, чтобы код сброса пароля мог найти его в базе данных. То, что сработало для меня, выглядит примерно так:
<?php
namespace Tests\Controllers\Unit;
use Tests\TestCase;
use Illuminate\Support\Facades\Notification;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ResetPasswordEmailTest extends TestCase
{
use RefreshDatabase;
public function setUp()
{
parent::setUp();
Notification::fake();
}
/** @test */
public function does_send_password_reset_email()
{
$user = factory('App\User')->create();
$user->save();
$this->post(route('password.email'), ['email' => $user->email])
Notification::assertSentTo($user, ResetPassword::class);
}
}
Вы также можете проверить содержимое письма, используя что-то вроде этого:
Notification::assertSentTo(
$user,
ResetPassword::class,
function($notification, $channels) use ($user) {
$mail = $notification->toMail($user)->build();
$expected_subject = "Here's your password reset";
return $mail->subject === $expected_sub;
}
);