как получить ссылку для подтверждения адреса электронной почты в модуле Test Laravel - PullRequest
0 голосов
/ 21 декабря 2018

Я занимаюсь разработкой приложения Laravel.Я делаю модульное тестирование моего приложения.Теперь у меня возникли проблемы с проверкой процесса проверки.

Сейчас я пытаюсь зарегистрировать пользователя, проверить, отправлено ли письмо с подтверждением, и я получу ссылку для подтверждения.что регистрация, то я сделаю что-то с этой ссылкой.

  1. Первая проблема заключается в том, что электронное письмо не отправлено.
  2. Вторая проблема в том, что я не знаю, как получить ссылку для подтверждения по электронной почте?

Это мой тест

public function test_user_can_be_verified_and_redirected_based_on_role()
{
    Notification::fake();
    $user = $this->registerUser();
    Notification::assertSentTo($user, SendEmailVerificationNotification::class);

}

protected function registerUser()
{
    $user = factory(User::class)->make();

    $this->post(route('register'), [
        'name' => $user->name,
        'email' => $user->email,
        'password' => 'testing',
        'password_confirmation' => 'testing',
    ])->assertRedirect();

    return User::whereEmail($user->email)->first();
}

Но проблема в том, что уведомление не отправляется, даже если оно отправляется при регистрации в браузере.Я также хотел бы получить ссылку для проверки и сделать что-нибудь.Как я могу это сделать?

1 Ответ

0 голосов
/ 29 августа 2019

Не идеальное решение, но оно делает свое дело, если кто-то нарушит эту функцию, я узнаю об этом.:)

Сначала перезаписать защищенный метод verificationUri уведомления VerifyEmail и сделать его общедоступным

class EmailVerificationNotification extends VerifyEmail
{
    public function verificationUrl($notifiable) {
        return parent::verificationUrl($notifiable);
    }
}

Затем использовать его для создания ссылки и утверждения против нее ..

    /** @test */
    public function an_user_can_verify_his_email_address()
    {
        $notification = new EmailVerificationNotification();

        $user = factory(User::class)->create(['email_verified_at' => null]);

        $uri = $notification->verificationUrl($user);

        $this->assertSame(null, $user->email_verified_at);

        $this->actingAs($user)->get($uri);

        $this->assertNotNull($user->email_verified_at);
    }
...