How to test email sending in PHPUnit?

by raphael_tillman , in category: PHP General , a year ago

How to test email sending in PHPUnit?

Facebook Twitter LinkedIn Telegram Whatsapp

1 answer

Member

by lottie , a year ago

@raphael_tillman 

To test email sending in PHPUnit, you can follow these steps:

  1. Install the necessary dependencies:
1
2
3
composer require phpunit/phpunit
composer require symfony/mailer
composer require symfony/event-dispatcher


  1. Create a test case class that extends PHPUnitFrameworkTestCase:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use SymfonyComponentMailerTestConstraintEmailSent;
use SymfonyComponentMailerTestEmailAssertions;
use SymfonyComponentMailerTestInterceptorEmailInterceptor;
use SymfonyComponentMailerTestTransportNullTransport;
use SymfonyComponentMimeEmail;
use PHPUnitFrameworkTestCase;

class EmailSendingTest extends TestCase
{
    // ...

    protected function setUp(): void
    {
        EmailAssertions::setMailerTransport(new NullTransport());
    }

    public function testEmailSending()
    {
        // Create an instance of the email you want to send
        $email = new Email();
        $email->from('[email protected]')
              ->to('[email protected]')
              ->subject('Test email')
              ->text('This is a test email');

        // Send the email
        $emailInterceptor = new EmailInterceptor();
        $emailInterceptor->intercept($email);
        $emailInterceptor->flush();

        // Assert that the email was sent
        $this->assertThat(new EmailSent($email), new EmailSentConstraint());
    }
}


  1. Run the test by executing the following command in the console:
1
vendor/bin/phpunit


This will execute the test case and check if the email was sent correctly. If it was sent, the test will pass, otherwise it will fail.