App\Mail\EmailGenerator 类的对象无法转换为字符串

Posted

技术标签:

【中文标题】App\\Mail\\EmailGenerator 类的对象无法转换为字符串【英文标题】:Object of class App\Mail\EmailGenerator could not be converted to stringApp\Mail\EmailGenerator 类的对象无法转换为字符串 【发布时间】:2021-06-16 06:02:00 【问题描述】:

我有一个名为EmailGenerator 的邮件文件,我有一个名为NotificationTest 的测试。

每次我运行测试时,我都会遇到这个错误。

 Object of class App\Mail\EmailGenerator could not be converted to string

这是我的NotificationTest.php

<?php

namespace Tests\Unit;

use Tests\TestCase;
use App\Http\Livewire\Notifications\CreateNotification;
use App\Http\Livewire\Notifications\ManageNotifications;
use App\Models\EmailTemplate;
use Livewire\Livewire;
use Mockery;
use Mockery\MockInterface;
use Mail;
use App\Mail\EmailGenerator;
use App\Models\User;

class NotificationTest extends TestCase

    public function test_sample_email()
    
        Mail::fake();

        Mail::assertNothingSent();
        
        $template = EmailTemplate::factory()->create([
            'name' => 'foo',
        ]);

        Mail::assertSent(new EmailGenerator($template));
    


我刚刚从这个文档https://laravel.com/docs/8.x/mocking#mail-fake复制了示例代码

这是我在EmailGenerator.php中的代码

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use App\Models\EmailTemplate;

class EmailGenerator extends Mailable

    use Queueable, SerializesModels;

    public $template;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(EmailTemplate $template)
    
        $this->template = $template;
    

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    
        return $this->subject($this->template->subject)
                    ->markdown('emails.generator');
    


【问题讨论】:

【参考方案1】:

看起来Mail::assertSent 期望的是类名而不是类的实例。

也许改成:

Mail::assertSent(EmailGenerator::class, 1);

【讨论】:

以上是关于App\Mail\EmailGenerator 类的对象无法转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

30根据官方教程详解嵌套类内部类静态嵌套类局部类匿名类 ...

Java 静态成员类 非静态的成员类 局部类 匿名类

JavaSE基础(十 三 )---<内部类>成员内部类,静态内部类,局部内部类,匿名内部类,内部类的意义

Kotlin基础(十三) 嵌套类内部类和匿名内部类

java 内部类和外部类的关系

19-Java-核心类库2-包装类Integer类String类StringBuffer类StringBuilder类