我想了解使用rspec測試多步驟工作流程的習慣用法或最佳實踐。在rspec中測試多步驟工作流程
讓我們作爲一個例子的「購物車」系統,其中當用戶提交到籃下,我們沒有使用HTTPS購買過程中可能會
- ,重定向到https
- 當用戶提交到籃子,我們使用的是HTTPS並沒有什麼餅乾,創建並顯示一個新的籃子裏,當用戶提交籃發送回一個cookie
- ,我們使用的是HTTPS,有一個有效的cookie和新的項目是不同的產品比第一個項目,添加一條線到籃子並顯示兩條線
- 當用戶提交到購物籃並且我們使用的是https並且有一個有效的cookie,並且新項目用於與前一個產品相同的產品時,增加該購物籃的數量並顯示兩行
- 當用戶單擊「結帳」籃子頁面上,並使用HTTPS並有一個cookie和籃非空和...
- ...
我讀過http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/,其職責IA每個「它阻止」應該只包含一個斷言:不是進行計算,然後在同一個塊中測試多個屬性,在上下文中使用「before」來創建(或檢索)測試中的對象並將其分配給@some_instance_variable,然後將每個屬性測試寫爲一個單獨的塊。這有點幫助,但是在上面所述的測試步驟n需要執行步驟[1..n-1]的所有設置的情況下,我發現自己要麼複製設置代碼(顯然不好),要麼創建大量輔助函數越來越笨拙的名字(def create_basket_with_three_lines_and_two_products),並在每一步的前一個塊中連續調用它們。
如何做到這一點不太冗長/繁瑣任何提示嗎?我很欣賞這個想法背後的一般原則,即每個例子不應該依賴於前面例子留下的狀態,但是當你測試一個多步驟的過程並且在任何步驟都會出錯的時候,爲每一步設置上下文是不可避免地會需要重新運行所有前面的n個步驟中的設置,所以......
現在您已經使用rspec-steps gem,您是否滿意解決多步驟尊重問題的結果? – Angela 2015-05-11 04:16:55
@Angela:恩,好問題。我簡單地使用了它,但小組的其他成員並不熱衷於此,所以我們最終放棄了它,並有更多的重複。我*認爲*理由是我們需要更多的可讀性,但這是一個很長的時間....在這一點上,我發現真正的集成測試是最簡單的,只是寫作一個大功能,每個測試只執行一次「工作流程」。不是最習慣或流行的方法,但我喜歡可讀性。 – Nerdmaster 2015-05-11 15:56:58
我在rspec中只看到一個'describe'? – Angela 2015-05-13 05:54:47