捕获电子邮件

功能测试还可以包括测试离开环境的流程,例如外部 API 调用和电子邮件。

例如,假设你在功能上测试了你网站的注册过程。此过程的最后一步涉及发送带有激活链接的电子邮件。在访问此链接之前,该帐户尚未完全注册。你想要测试两个:

  1. 电子邮件将正确发送(格式化,占位符替换等),以及
  2. 激活链接有效

现在,你可以测试电子邮件发送,但使用 IMAP 或 POP 客户端从邮箱中检索已发送的电子邮件,但这意味着你还要测试 Internet 连接,远程电子邮件服务器以及传送中可能出现的任何问题(垃圾邮件检测)例如)。

更简单的解决方案是使用本地服务来捕获传出的 SMTP 连接并将发送的电子邮件转储到磁盘。

几个例子是:

smtp-sink - 与 Postfix 绑定在一起的实用程序。

# Stop the currently running service
sudo service postfix stop

# Dumps outgoing emails to file as "day.hour.minute.second"
smtp-sink -d "%d.%H.%M.%S" localhost:2500 1000

# Now send mails to your local SMTP server as normal and they will be
# dumped to raw text file for you to open and read

# Run your functional tests
vendor/bin/behat

不要忘记杀死 smtp-sink 并在之后重启你的后缀服务:

# Restart postfix
sudo service postfix start

FakeSMTP - 一种基于 Java 的客户端,用于捕获外发邮件

# -b = Start without GUI interface
# -o = Which directory to dump your emails to
$ java -jar fakeSMTP.jar -b -o output_directory_name

或者,你可以使用提供此服务的远程服务(如 mailtrap), 但你的测试依赖于 Internet 访问。