Versions:

This document contains information about a future release and not the current stable version (4). Be aware that information on this page may change and API's may not be stable for production use.

Testing Email within Unit Tests

SilverStripe's test system has built-in support for testing emails sent using the Email class. If you are running a SapphireTest test, then it holds off actually sending the email, and instead lets you assert that an email was sent using this method.

public function MyMethod() {
    $e = new Email();
    $e->To = "[email protected]";
    $e->Subject = "Hi there";
    $e->Body = "I just really wanted to email you and say hi.";
    $e->send();
}

To test that MyMethod sends the correct email, use the SapphireTest::assertEmailSent() method.

$this->assertEmailSent($to, $from, $subject, $body);

// to assert that the email is sent to the correct person
$this->assertEmailSent("[email protected]", null, "/th.*e$/");

Each of the arguments ($to, $from, $subject and $body) can be either one of the following.

  • A string: match exactly that string
  • null/false: match anything
  • A PERL regular expression (starting with '/')

API Documentation

Was this article helpful?