在Symfony 5.0.2项目中,对新Mailer的测试失败,并显示
错误:在null上调用成员函数getSubject()
电子邮件service和test基于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());
}
}