【问题标题】:Laravel 5.4 Mail testLaravel 5.4 邮件测试
【发布时间】:2019-01-13 08:27:27
【问题描述】:

听起来很简单,但我不知道如何将数据传递到下面的可邮寄邮件进行测试。它可以正常使用。

通过控制器工作

Mail::to($user)->send(new C2cMail($this->commitment->data, \App\EModule::findOrFail($this->commitment->module_id), $user));

可邮寄

    public function __construct($commitment, Module $module, User $user)
    {
        $this->commitment = unserialize($commitment);
        $this->module = $module;
        $this->user = $user;
        $this->title = $this->module->title;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        try {
            if(empty(env('MAIL_FROM')) || !env('MAIL_FROM') || env('MAIL_FROM') == null){
                throw new \Exception("You must set your MAIL_FROM environment variable", 406);
            }
            $this->from(env('MAIL_FROM'))->subject('First email test')->view('mail.c2c-1');
        } catch (\Exception $e) {
            \Log::error($e->getMessage());
        }
    }

所以这一切正常,但我无法进行单元测试以将数据传递给可邮寄构造函数。

测试用例

public function testC2cEmailSend()
    {
        Mail::fake();

        // Grab any old C2C entry
        $c2c = \App\Commitment::with(['module', 'user'])->first();

        $data = $c2c->data;
        $user = $c2c->user;
        $module = $c2c->module;
        $mailable_data = ['data' => $data, 'user' => $user, 'module' => $module];

        Mail::assertSent(C2cFirst::class, function($mail) use ($mailable_data) {
            return $mail->hasTo($mailable_data['user']->email);
        });
    }

【问题讨论】:

    标签: php laravel unit-testing phpunit laravel-5.4


    【解决方案1】:

    自行解决

    这是对Mail::fake() 实际工作原理的误解。它劫持Mail 类并将其替换为MailFake 的实例;因此将其置于所需功能之上会阻止实际发送。

    【讨论】:

    • Mail::fake() 未对其进行测试,电子邮件内部存在问题。 Mailable->build() 永远不会执行,并且 email-blade 永远不会构建。
    • @YevgeniyAfanasyev 正确
    • 那么应该不是“邮件测试”问题,而是“模拟邮件测试”问题。
    • 好吧,我不写日记,这个问题已经有两年多了,你正在为一个我不再关心的问题而烦恼。
    猜你喜欢
    • 2017-11-23
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多