黃瓜看作測試你的整個應用程序,從外到內,其中RSpec的是特定模塊的單元測試。您首先指定希望您的應用程序在Cucumber中具有哪些行爲,然後將其下拉到RSpec中並描述使這些行爲起作用的類和模塊。
我花了一段時間才弄到它,但我發現Cucumber真的很好地描述了你希望你的應用程序做什麼功能,RSpec真的很擅長描述它應該如何實現它。
所以你會在你的黃瓜故事中說你想要什麼樣的功能,並寫出超級簡單的步驟來提供輸入並查看輸出。然後,你下降到RSpec,並寫下它應該如何實際執行它的規範。
假設您的功能是在網站上搜索用戶名的功能。你可能會寫一個黃瓜功能,第一個(也是唯一第一)的情況是這樣的:
Feature: Search users
In order to find people with similar interests as myself
As a user
I want to search for people
Scenario: Search for similar hobbies
Given there is a search page
And there is a list of hobbies
And one of the hobbies is "full contact ironing"
When I select "full contact ironing"
And press search
Then a list of users with the hobby "full contact ironing" are shown
你跑黃瓜,它會告訴你你缺少的步驟,你複製這些並創建簡單的步驟來檢查對於這個東西,但不寫任何代碼呢。
當你與你的步驟定義做了你下拉到RSpec的,並開始你怎麼想這個工作的書寫規範。 (黃瓜當然應該失敗)
describe "SearchController" do
it "should respond to searches" do
sc = SearchController.new
sc.should respond_to(:search)
end
end
你運行RSpec的,看着它失敗了,熄滅,並編寫代碼:
class SearchController
def search
end
end
就是這樣。現在再次運行你的測試。它應該通過,所以開始變得更加具體,並開始描述你將如何實際使用搜索功能。我不想深入研究它,我只是想給你一個想法,描述你在Cucumber中想要的內容,然後描述它在RSpec中的實際工作方式。
當然,您可以在Cucumber或RSpec中做所有事情,但我真的發現Cucumber可以幫助我以非常簡單的方式說出我想要的內容,如果我在RSpec中嘗試這樣做,我會陷入細節中。如果我首先使用Cucumber來描述我想要的基本特徵,那麼我爲什麼可以放入RSpec並說出我希望該特徵如何實際工作。
將有在測試中,有時,這是不是很乾的重複,但如果你認爲它是細節問題的水平,可能不會打擾你一樣多。我開始時做了大量的重複工作,直到我意識到我應該大致說出我想要的Cucumber,然後特別說明我想要的RSpec。
這是如何使用這些工具都只是一個新手的想法,但它似乎很好地爲我工作至今。我可能給了你一個可怕的例子,但我只是想把整個細節的重點放到我在使用這些工具時發現有用的特定細節上。
我完全同意,這一直是我的經歷。 – 2009-11-10 16:58:08