Mailer测试失败,并在null上调用成员函数getSubject()

在Symfony 5.0.2项目中,对新Mailer的测试失败,并显示

  

错误:在null上调用成员函数getSubject()

电子邮件servicetest基于symfonycast教程。

var_dump($email);之后立即在服务中添加$email = ...;会显示object(Symfony\Bridge\Twig\Mime\TemplatedEmail)#24 (11) {...,这表明在服务中创建了一个真实的对象。

services.yaml:

    App\Services\EmailerService:
        $mailer: '@mailer'
        $senderAddress: '%app.sender_address%'

服务:

use Symfony\Bridge\Twig\Mime\TemplatedEmail;

class EmailerService
{
    private $mailer;
    private $sender;

    public function __construct($mailer,$senderAddress)
    {
        $this->mailer = $mailer;
        $this->sender = $senderAddress;
    }

    public function appMailer($mailParams)
    {
        $email = (new TemplatedEmail())
                ->from($this->sender)
                ->to($mailParams['recipient'])
                ->subject($mailParams['subject'])
                ->htmlTemplate($mailParams['view'])
                ->context($mailParams['context']);
        $this->mailer->send($email);
    }
}

测试:

use App\Services\EmailerService;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Mailer\MailerInterface;

class MailerTest extends TestCase
{
    public function testSimpleMessage()
    {
        $symfonyMailer = $this->createMock(MailerInterface::class);
        $symfonyMailer->expects($this->once())
                ->method('send');

        $mailer = new EmailerService($symfonyMailer,'admin@bogus.info','admin@bogus.info');
        $mailParams = [
            'view' => 'Email/non_user_forgotten_password.html.twig','context' => ['supportEmail' => 'admin@bogus.info'],'recipient' => 'bborko@bogus.info','subject' => 'Test message',];
        $email = $mailer->appMailer($mailParams);

        $this->assertSame('Test message',$email->getSubject());
    }
}

wyaacc 回答:Mailer测试失败,并在null上调用成员函数getSubject()

appMailer()必须返回一个TemplatedEmail对象,以便您可以在其上调用getSubject()。目前,它什么也没返回。更改为:

public function appMailer($mailParams)
{
    $email = (new TemplatedEmail())
            ->from($this->sender)
            ->to($mailParams['recipient'])
            ->subject($mailParams['subject'])
            ->htmlTemplate($mailParams['view'])
            ->context($mailParams['context']);
    $this->mailer->send($email);

    return $email; // I added this line. 
}
本文链接:https://www.f2er.com/2837003.html

大家都在问