A collection of PHPUnit test traits.
- PHP 7.2+ or 8.0+
composer require selective/test-traits --dev
Requirements: composer require symfony/mailer
DI container setup example:
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Mailer\EventListener\EnvelopeListener;
use Symfony\Component\Mailer\EventListener\MessageListener;
use Symfony\Component\Mailer\EventListener\MessageLoggerListener;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mailer\Transport\TransportInterface;
// ...
return [
// Mailer
MailerInterface::class => function (ContainerInterface $container) {
return new Mailer($container->get(TransportInterface::class));
},
// Mailer transport
TransportInterface::class => function (ContainerInterface $container) {
$settings = $container->get('settings')['smtp'];
// smtp://user:[email protected]:25
$dsn = sprintf(
'%s://%s:%s@%s:%s',
$settings['type'],
$settings['username'],
$settings['password'],
$settings['host'],
$settings['port']
);
$eventDispatcher = $container->get(EventDispatcherInterface::class);
return Transport::fromDsn($dsn, $eventDispatcher);
},
EventDispatcherInterface::class => function () {
$eventDispatcher = new EventDispatcher();
$eventDispatcher->addSubscriber(new MessageListener());
$eventDispatcher->addSubscriber(new EnvelopeListener());
$eventDispatcher->addSubscriber(new MessageLoggerListener());
return $eventDispatcher;
},
// ...
],
Usage:
PHPUnit test case:
<?php
namespace App\Test\TestCase;
use PHPUnit\Framework\TestCase;
use Selective\TestTrait\Traits\ContainerTestTrait;
use Selective\TestTrait\Traits\MailerTestTrait;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
final class MailerExampleTest extends TestCase
{
use ContainerTestTrait;
use MailerTestTrait;
public function testMailer(): void
{
$mailer = $this->container->get(MailerInterface::class);
// Send email
$email = (new Email())
->from('[email protected]')
->to('[email protected]')
->subject('Time for Symfony Mailer!')
->text('Sending emails is fun again!')
->html('<p>My HTML content</p>');
$mailer->send($email);
$this->assertEmailCount(1);
$this->assertEmailTextBodyContains($this->getMailerMessage(), 'Sending emails is fun again!');
$this->assertEmailHtmlBodyContains($this->getMailerMessage(), '<p>My HTML content</p>');
}
}
The MIT License (MIT). Please see License File for more information.