代码之家  ›  专栏  ›  技术社区  ›  ggdx

拉维尔5.4邮件测试

  •  0
  • ggdx  · 技术社区  · 6 年前

    听起来很简单,但我不知道如何将数据传递给下面的邮件进行测试。正常使用效果很好。

    通过控制器工作

    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);
            });
        }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   ggdx    6 年前

    自我解决

    关于如何 Mail::fake() 确实有效。它劫持了 Mail 类并将其替换为 MailFake ;因此,将其放置在所需功能之上可以防止实际发送。