簡體   English   中英

Ruby on Rails中的JavaScript集成測試

[英]JavaScript integration testing in Ruby on Rails

我對此進行了一些搜索,並試圖實現一個自制的解決方案,但到目前為止還沒有發現對它有信心。

我需要的是在Ruby on Rails中編寫集成測試,它與JavaScript交互並獲得斷言某些行為的編程方式。 我正在使用Test :: Unit作為控制器/模型部分,但我正在努力測試我的應用程序使用的一些jQuery / JavaScript行為。 主要是它包含UI中的ajax調用和交互,它們更新了一些信息集。

我還沒有找到一個讓我自信的解決方案,它與自動測試和整個紅綠過程很好地集成,所以現在我的客戶端代碼的大多數部分都是未經測試的,這讓我感到緊張(因為它應該是:P )。

那么,有沒有人對這個問題的最佳實踐提出建議? 單元測試JS有點棘手,正如Crockford所指出的那樣,因為它嚴重依賴於UI的當前狀態等,而且即使他沒有找到實現體面測試的好方法,AFAIK也是如此。

簡而言之:我需要針對某些UI行為實施測試,這些行為依賴於Ajax,與自動測試或其他CI工具集成,並且沒有找到一種優秀且優雅的方式來實現它。

感謝大家的關注,最誠摯的問候

AFAIK,在CapybaraSelenium Web-Driver的組合之外,很少有自動測試JS代碼的選項。 我使用黃瓜與水豚和硒網絡驅動程序,因為selenium-webdriver實際上啟動firefox或chrome來通過ajax調用來測試特定頁面,運行一套測試需要更長的時間。

有一些替代方案,但它們不是一直工作或不適用於所有情況。 例如: 帶有envjs的Capybara

2011年4月,思想機器人更新了他們對javascript測試的追求 由於以下原因,Akephalos失寵了:

錯誤:如前所述,htmlunit中存在錯誤,特別是jQuery的實時錯誤。 雖然所有瀏覽器實現都有錯誤,但如果測試遇到與實際瀏覽器相同的錯誤,則更有用。

兼容性:htmlunit沒有完全實現現代瀏覽器的功能集。 例如,它不能完全處理DOM范圍或Ajax文件上載。

渲染:htmlunit實際上並不渲染頁面,因此依賴於CSS可見性或定位的測試將不起作用。

性能:當您的大多數測試使用Javascript時,帶有htmlunit的測試套件開始爬行。 用Akephalos開始測試需要一段時間,大型測試套件可能需要10或15分鍾。

所以他們推出了自己的開源解決方案 - capybara-webkit 它仍然相當新,但它看起來像現在的方式。

本文推薦Akephalos

我用黃瓜和水豚用硒。 這非常令人沮喪,因為selenium似乎無法看到動態生成的javascript,盡管capybara應該等待它。 那是在2011年1月。現在情況可能不同了。

目前,我正在使用黃瓜和水豚與akephalos。 到目前為止,這是非常困難的,因為1.它是無頭的,所以你看不到進步。 Capybara的“save_and_open”電話在一定程度上有所幫助。 2. jQuery和akephalos似乎並沒有很好地融合在一起。 例如,使用jquery的.change()觸發單選按鈕在chrome中工作正常,但在akephalos中不起作用。 也許這是故意的,因為我后來聽說它在IE中不起作用。 我通過使用.click()而不是.change()來解決問題,但由於.change函數設置為在一堆問題上運行,因此我必須專門編寫代碼以使其適用於測試。

對我來說,最重要的是在rails env中進行自動化javascript驗收測試仍然不成熟,可能還需要更多的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM