当前位置: 首页 > 知识库问答 >
问题:

单元测试Laravel密码重置电子邮件-可邮寄未排队

张晨朗
2023-03-14

我用的是拉威尔的授权书。我正在测试你放入电子邮件的页面,当你点击提交按钮时,密码重置电子邮件将发送到你的电子邮件。

当我手动重置密码时,会发送密码重置电子邮件。但我创建了这个测试,以确保密码重置电子邮件被发送,但它不起作用。

有1次失败:

1) 预期的[Illumb\Foundation\Auth\ResetPassword]邮件未排队。断言false为true失败。

我遵循以下代码:

https://github.com/JeffreyWay/council/blob/master/tests/Feature/Auth/RegisterUserTest.php

<?php

namespace Tests\Controllers\Unit;

use Tests\TestCase;
use Illuminate\Support\Facades\Mail;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ResetPasswordEmailTest extends TestCase
{

    use RefreshDatabase;


    public function setUp()
    {
        parent::setUp();
        
        Mail::fake();
    }


    /** @test */
    public function does_send_password_reset_email()
    {
        $user = factory('App\User')->create();

        $this->post(route('password.email'), ['email' => $user->email])
             
        Mail::assertQueued(ResetPassword::class);
    }

}

共有1个答案

周麒
2023-03-14

您收到该错误是因为密码重置电子邮件是通知而不是可邮寄。对我有效的是这样的:

<?php

namespace Tests\Controllers\Unit;

use App\User;
use Illuminate\Support\Facades\Notification;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class ResetPasswordEmailTest extends TestCase
{
    use RefreshDatabase;

    public function setUp()
    {
        parent::setUp();
        Notification::fake();
    }

    /** @test */
    public function does_send_password_reset_email()
    {
        $user = User::factory()->create();
        $this->post(route('password.email'), ['email' => $user->email]);
        Notification::assertSentTo($user, ResetPassword::class);
    }
}

您还可以使用回调作为第三个参数来验证电子邮件的内容。回调接收通知和通道数组,并应返回true或false以通过或失败断言。例如:

$expected_subject = "Here's your password reset";
Notification::assertSentTo(
    $user,
    ResetPassword::class, 
    fn ($n, $c) => $n->toMail($user)->build()->subject === $expected_sub;
);
 类似资料:
  • 我使用laravel 5.6,并成功地将视图作为电子邮件发送。 我使用以下代码: 我唯一的问题是密码重置。我知道我可以自定义一点模板,但是如何覆盖默认的电子邮件模板并发送我自己的视图? 我尝试写我自己的ResetPassword通知: 但我只能翻译电子邮件。我想要的是根据我自己的模板发送我自己的视图。 可能吗? 谢谢你的帮助。

  • 我是拉拉维尔的初学者。目前我正在学习这个框架。我现在的Laravel版本是5.3。 我正在使用

  • 我有用户表,其中包含用户及其角色的信息,所以这里唯一的是“电子邮件”、“role_id”、“电话”组合在一起,所以电子邮件可以复制,但如果role_id和电话号码被复制,就不能复制,这是因为用户可以客户,这意味着role_id=1,或者他有商业账户,这意味着role_id=2,但是如果这个客户需要重置他的客户密码,或者他的商业账户密码呢?我该怎么做呢? 桌子

  • 问题内容: MyDjango应用程序当前已设置为使用本机注册包来处理用户身份验证和管理。 我创建了一些文件,用于发送密码重置令牌. 它工作正常。除了密码重设电子邮件外,它是一个丑陋的纯文字怪物。我想使其与My应用程序发送的所有其他电子邮件的外观和风格相匹配。IE:我希望它是HTML,并包含图像,样式和链接。我怎么做? 我按照这里的详细说明进行操作。但是,该代码中有一个错误,我不知道该如何处理: 有

  • 每当我在Firebase中使用电子邮件/密码身份验证提供程序时,提供程序都会在成功注册时发送一个无记名令牌,即使是。是否有一种开箱即用的方法将电子邮件/密码身份验证提供程序配置为在用户验证其电子邮件地址之前不发送无记名令牌(并返回403错误)? 请注意,我知道如何创建用户、登录用户、发送验证电子邮件等。。。使用firebase v9。x通过firebase/auth中的方法创建用户(使用Email

  • 每个社区都需要发送电子邮件给用户,用来激活账户、重置密码、接收通知以及与其他用户通讯交流。作为论坛管理员,您首先要做的几件事之一就是配置好论坛的邮件服务!配置错误的话,用户在注册时会收到报错。 Flarum 默认提供以下所列驱动,若有需要,开发者可自行开发插件添加 自定义邮件驱动。 这是最常用的邮件驱动,需要您配置主机地址、端口、加密方式、用户名和密码,以使用外部 SMTP 服务。请注意,加密方式