捕獲電子郵件

功能測試還可以包括測試離開環境的流程,例如外部 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 訪問。