我正在为Laravel的内置电子邮件验证创建测试,并且不确定如何通过PHPUnit进行测试。我可以使用mailtrap.io接收通知电子邮件,但无法通过PHPUnit测试。
这是我的考试:
namespace Tests\Feature;
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Notification;
use Tests\TestCase;
class RegistrationTest extends TestCase
{
use RefreshDatabase;
function test_a_confirmation_email_is_sent_on_registration()
{
Notification::fake();
$user = create('App\User');
Notification::assertSentTo($user, VerifyEmail::class);
}
}
我希望通过assertSentTo。
现在我得到:
预期的[Illuminate \ Auth \ Notifications \ VerifyEmail]通知 没有发送。断言false为真失败。 /home/jhiggins/projects/forum/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php:52 /home/jhiggins/projects/forum/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:237 /home/jhiggins/projects/forum/tests/Feature/RegistrationTest.php:20
答案 0 :(得分:1)
注册新用户时,Laravel(5.7及更高版本)将调度一个Registered Event,因此我认为这里的重点是断言该事件已被调用。 Laravel框架已经完成了其余的工作(发送电子邮件验证等)。
这是我的功能测试的摘要:
public function a_confirmation_email_is_sent_upon_registration()
{
Event::fake();
$this->post(route('register'), [
'name' => 'Joe',
'email' => 'testemail@test.com',
'password' => 'passwordtest',
'password_confirmation' => 'passwordtest'
]);
Event::assertDispatched(Registered::class);
}