2011-06-17 80 views
6

作爲一個很長的時間php dev和rails newb,我一直試圖掌握tdd/bdd。這裏有很多工具和方法,這可能是一項非常艱鉅的任務。經過大量的閱讀後,我得出結論,這將是我的首選測試方法:尋找Rails 3與RSpec集成/驗收測試的例子

  • 沒有黃瓜,在我看來,這只是一個不必要的複雜性。
  • RSpec用於單元測試
  • 用於集成/驗收測試的RSpec /水豚。
  • 沒有測試控制器/視圖。
  • 工廠女孩或工廠的機械師。
  • 不要嘲笑我自己的代碼。

作爲一個完整的BDD newb,這可能會離開基地,所以隨時提供這個測試'堆棧'的建議。

我真正想要的是一個使用這些工具的開源項目,我可以從中尋找靈感。

教程也將讚賞,但我認爲看到一個真實世界的項目實現所有這些想法將是非常有益的。

回答

10

每個人似乎都有自己的配方,適合他們的測試。我的背景與您的一樣 - 長時間的PHP開發人員不使用測試(但在開發時進行大量的手動白盒測試)。我最近開始編寫我的第一個生產級應用程序,即付費玩Rails應用程序。這是我頭三個月後的想法。

我也發現黃瓜太複雜了,我開始。在我終於意識到自己離實際測試框架太遠了之前,我一直苦苦掙扎。一旦我選擇了RSpec,事情就變得更加清晰了。也就是說,現在我已經用一個強大的測試套件編寫了我的第一個應用程序,我想我可能會將Cucumber放到我的下一個Rails應用程序配方中,並且在使用RSpec進行單元測試時將其用於集成測試感覺更加舒適。

一旦我終於明白了這個過程,我就開發出了一種對RSpec不健康的迷戀。運行這些測試真的很美,看到所有的綠色。其實,看到紅色甚至令人滿意,因爲它告訴我接下來要做什麼。

我正在使用默認的Webrat進行集成測試。我沒有遇到任何Webrat無法解決的問題,但我也沒有給Capybara一個嘗試,所以也許我只是不知道自己有多糟糕。

我開始通過跟隨Rails教程手冊編寫測試,並在其中作者說「由於我不偏向單獨測試視圖或幫助程序,我發現它們不是脆弱的就是冗餘的,我們的第一步是消除它們。「 (第93頁第2段)在編寫了一堆輔助方法之後,我決定回去爲所有這些方法編寫單獨的幫助程序測試。我仍在將我的視圖測試轉到我的控制器測試中,但是我可以在我的下一個項目中看到它們的分離。 FWIW,我認爲你應該在一定程度上爲所有內容編寫測試,即使你只是依靠你的控制器測試來執行你的視圖,和/或你的視圖測試來執行你的幫助器方法。

我在這個項目中使用了Factory Girl,並且我發現它非常實用且易於使用。我沒有嘗試機械師,但它似乎同樣受歡迎。我要提到的一件事是,當我第一次開始寫作我的工廠時,我還使用FFaker gem爲我創建的每個工廠對象生成隨機內容。這看起來很不錯,因爲變量的內容有時會讓我找到我在開發中遺漏的東西(儘管目前還不能算是一個很好的例子),但這也意味着我不得不考慮截斷所有的東西返回FFaker數據以適應模型中的長度限制。事實證明,從長遠來看,這太笨拙了,所以我刪除了所有這些代碼,併爲所有工廠使用靜態字符串,並且僅用於所需的字段。然後,當我想要鍛鍊一個特定的領域時,我會在我的實際規格中這樣做。海事組織,你的工廠應該只包含足夠的數據來創建一個有效的對象,而不是更多。至於嘲笑,我只找到了一些我需要嘲笑某些東西的地方,但也許我對Rspec太陌生,不知道我做錯了。

最後,就具體示例而言,請查看GitHub上的Rails應用程序或包含測試的開源Rails項目。或者像我一樣跟隨Rails教程。無論你決定做什麼,儘可能靠近金屬開始,然後嘗試不同的寶石/插件等,如果你決定不喜歡結果,總是要確保你能夠支持你的改變。我發現試圖從一個完整的配方開始(即吊帶,藍光特別等)太過壓倒。從一個原始的Rails應用程序開始,我能夠嘗試不同的解決方案(回形針與carrierwave,typus與rails_admin,間隙與設計等),看看哪些解決方案適用於我的個人偏好。很明顯,Rails應用程序沒有一個完美的配方,每個人的首選配方只是一個意見。