Versions:

This document contains information for an outdated version and may not be maintained any more. If some of your projects still use this version, consider upgrading as soon as possible.

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?