【问题标题】:How can i test mail sending using phpunit?如何使用 phpunit 测试邮件发送?
【发布时间】:2023-03-13 21:05:02
【问题描述】:

我有一个可邮寄的类,我用它来向用户发送电子邮件,效果很好。我想写一些phpunit测试来检查邮件是否真的发送了。不幸的是,我在文档中找不到很好的解释。

我的可邮寄课程:

class UserInvite extends Mailable
{
    use Queueable, SerializesModels;

    public $user;
    public $inviteMessage;

    /**
     * Create a new message instance.
     *
     * @param User $user
     * @param string $inviteMessage
     */
    public function __construct(User $user, string $inviteMessage)
    {
        $this->user = $user;
        $this->inviteMessage = $inviteMessage;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.mail');
    }
}

测试:

/** @test */
public function it_sends_invite()
{
    Mail::fake();
    $user = factory(User::class)->create();
    $inviteMessage = 'test';

    Mail::assertSent(new UserInvite($user, $inviteMessage));
}

错误:

ErrorException: 类 App\Mail\UserInvite 的对象无法转换为字符串

解决办法:

/** @test */
    public function it_sends_invite()
    {
        Mail::fake();

        $user = factory(User::class)->create();

        Mail::to($user)->send(new UserInvite($user, 'message'));

        Mail::assertSent(UserInvite::class);
    }

【问题讨论】:

    标签: php laravel phpunit


    【解决方案1】:

    在测试已发送邮件时,您不会传递整个可邮寄的实例。 PHPUnit 无论如何都无法比较完整的对象。相反,您只需传递完全限定的类名:

    // use App\Mail\UserInvite;
    
    Mail::assertSent(UserInvite::class);
    

    【讨论】:

    • 我试过这个,但得到:未发送预期的 [App\Mail\UserInvite] 可邮寄。断言 false 为 true 失败。我认为这是因为我们应该将 $user 和 $invite 转移到构造函数。
    • 不,它的意思正是它所说的。发送邮件的代码是什么样的?
    • Mail::to($user)->send(new UserInvite($user, $inviteMessage)); (工作正常)测试:Mail::fake(); Mail::assertSent(PasswordReset::class); (不起作用)
    • 在您的测试中,您没有调用任何应用程序代码。您只是分配一些变量并断言已发送邮件。那是行不通的。如果这不能解决问题,恐怕需要您发送代码的更多上下文。
    • 谢谢,它有效。我添加了发送电子邮件的代码。在 laravel 文档中我没有看到它。
    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2019-10-09
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多