捕獲電子郵件
功能測試還可以包括測試離開環境的流程,例如外部 API 呼叫和電子郵件。
例如,假設你在功能上測試了你網站的註冊過程。此過程的最後一步涉及傳送帶有啟用連結的電子郵件。在訪問此連結之前,該帳戶尚未完全註冊。你想要測試兩個:
- 電子郵件將正確傳送(格式化,佔位符替換等),以及
- 啟用連結有效
現在,你可以測試電子郵件傳送,但使用 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 訪問。