2011-07-21 68 views
2

我的應用程序發送包含絕對URL的電子郵件。Rails,測試郵件網址

我在配置/環境/ development.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' } 

現在我想測試,如果電子郵件包含有效的URL設置的主機。使用正則表達式,我從電子郵件中提取完整的URL,並且想使用Capybara功能訪問此地址。

mail = ActionMailer::Base.deliveries.last 
address = mail.body.to_s[%r{http.+/edit}] 
visit address; 

但我不知道是什麼主機應該在配置/環境/ test.rb

設置當我設置本地主機:3000它會嘗試連接到我的rails server命令啓動本地服務器。

你有什麼想法來解決這個問題嗎?

回答

0

而不是訪問URL爲什麼不只是針對RegEx驗證它,請確保它是有效的,編碼正確,指向正確的控制器。

你可能不想竟與服務器進行交互,如果你不生產服務器,使本地主機:3000是一個感傷的選擇

+0

測試環境已準備好處理此請求,我想訪問此地址。我認爲唯一的方法是將URL轉換爲實際路徑。如果地址是String對象,是否有這樣做的好方法? – Konrad

+0

使用URI.parse(string)來獲取一個URI對象,然後更改它的主機,然後以字符串的形式將其吐出。 –

0

嘿這裏是可怕的代碼片斷,也許可以幫助你。我使用email_spec來簡化在規範和黃瓜場景中使用電子郵件的工作,並且它已經有一些幫助者來簡化您的任務。在我的應用程序中,我有一些更復雜的情況,所以我不得不編寫自己的解析器。這裏是code。享受:)

1

爲了使這項工作時,硬編碼豚端口不是一個選項(如。parallel specs),把它放在你的spec_helper.rb中

YourApp::Application.config.action_mailer.default_url_options[:host] = "localhost:#{Capybara.server_port}"