如何测试Laravel的内置验证电子邮件通知?

时间:2019-05-27 23:19:46

标签: php laravel phpunit

我正在为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

1 个答案:

答案 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);
}