2010-11-22 43 views
4

當測試Flash的消息和產生的觀點,你應該以一種語言測試中生成的輸出:Ruby on Rails的測試最佳實踐(閃存封郵件和視圖)和國際化

should_set_the_flash_to /Hello/i 

或者你應該把國際化到你的測試:

should_set_the_flash_to I18n.t("sign_up.welcome") 

這可能是因爲我的問題是不問...隨意,如果有相結合的測試和國際化已經很好的說明了鏈接,以回答......

正確的問題

更新:在Arsen7的回答後輸入正確的國際化代碼,thx Arsen7!

回答

5

這取決於你想要測試什麼。

如果您測試Flash文本是否爲「Hello」,那麼您確定自己知道用戶會看到什麼。

另一方面,測試Flash是否包含與給定字符串的幫助器「t」返回的內容相同的內容,有時也是有意義的 - 例如,當翻譯文件經常更改或者其內容由某人創建時別的,稍後一段時間。

我個人總是測試確切的最終譯文(assert_equal "Hello", flash[:message]種類的東西)。

這使我確信:1)翻譯聲音效果良好,2)語言被正確識別(你不希望你的英語用戶波蘭的消息,你)

至於第二部分?你的問題:

也許「should_set_the_flash_to I18n.t("sign_up.welcome")」會工作嗎?

+0

Thx Arsen7! (我用(工作)I18n.t(「sign_up.welcome」)代碼更新了這個問題。 – 2010-11-22 13:15:52

+0

也許我應該將我的問題重新定義爲:如何將我的測試分解爲測試,以顯示正確的視圖或Flash msg(1 ),並且國際化按需要工作(2)並且關鍵短語正確地放在locales.yml文件中?在我看來,對於(1)我寧願選擇I18n.t(「sign_up.welcome」)( (3)我會選擇assert_equal「Hello」,flash [:message]。還剩下了嗎:有沒有一種方法可以系統地測試國際化在所有控制器之間的正確工作,以及Flash msgs? – 2010-11-22 13:23:04

+0

可以在所有測試中結合兩行測試:'should_set_the_flash_to「Hello」; assert_equal「Hello」,I18n.t(「key」)'?當字詞意外改變時會通知您,你會知道問題是在翻譯中還是在錯誤的關鍵中,但是我會犯錯d說,只要呈現的頁面上的文本是正確的,I18n是否能夠正常工作並不重要。測試效果,而不是執行 - 如果你決定某一天,而不是I18n你使用其他庫,你的測試仍然會報告成功(這將是很好的)。 – Arsen7 2010-11-22 13:58:55