NOTE: This is based off a video titled "Testing Email With Custom Assertions" that Jeffrey Way did on Laracasts.com. If you do not have an account on that site, then you should make one. It is an amazing resource. We have just taken that example & made it an easy-to-install package. Thanks Jeffrey!
PHPUnit mail assertions for testing email in Laravel.
Branch | Status | Coverage | Code Quality |
---|---|---|---|
Develop | |||
Master |
Install the package inside your dev dependencies:
$ composer require spinen/laravel-mail-assertions --dev
In order for the package to be able to make assertions on your emails, it has to be able to "read" the messages. It does so by parsing the Laravel log, so your mail driver has to be "log" for this package to function.
You mixin the assertions with the SpinenMailAssertionsMailTracking
trait. You get the following assertions...
seeEmailBcc
seeEmailCc
seeEmailContains
seeEmailContentTypeEquals
seeEmailCountEquals
seeEmailDoesNotContain
seeEmailEquals
seeEmailFrom
seeEmailPriorityEquals
seeEmailReplyTo
seeEmailSubjectContains
seeEmailSubjectDoesNotContain
seeEmailSubjectEquals
seeEmailTo
seeEmailWasNotSent
seeEmailWasSent
NOTE: If there was more than 1 email sent, then the assertions look at the last email.
<?phpuse IlluminateFoundationTestingWithoutMiddleware;use IlluminateFoundationTestingDatabaseMigrations;use IlluminateFoundationTestingDatabaseTransactions;use SpinenMailAssertionsMailTracking;class ExampleTest extends TestCase {use MailTracking;/** * A basic functional test example. * * @return void */public function testBasicExample() {$this->visit('/route-that-sends-an-email') ->seeEmailWasSent() ->seeEmailSubject('Hello World') ->seeEmailTo('[email protected]') ->seeEmailEquals('Click here to buy this jewelry.') ->seeEmailContains('Click here'); } }