2011-12-12 103 views
3

我有一個背景部分需要多分鐘的功能;它通過API在遠程系統上設置狀態。我希望它只對所有後續的場景執行一次,而不是針對每種場景執行。我的場景不會改變任何狀態,它們是隻讀的,所以不應該從一種場景到另一種場景產生副作用。黃瓜:如何執行多個場景一次背景

我沒有使用rails,也沒有本地數據庫,所以不能做數據庫事務。

我目前正在考慮在env.rb中使用Before來做些事情,並且根據隱式約定/標記的含義來創建一些條件代碼。 「@ background-only-once」,可以讓一些自定義代碼跳過這些步驟,或者它可以在步驟定義中執行不同的邏輯 - 但是嘗試在執行過程中共享這一點有點令人討厭。

想法?

+0

當你說'對於所有後續的場景只執行一次',這是否意味着在同一個特性文件中的場景?是否必須重新調用後臺中的步驟(例如,如果其中一個步驟出現在不同的功能文件中)? –

+0

a)是的,我想在「背景」部分中的步驟僅在該特性*中的任何場景*運行之前執行一次。 b)無關緊要;它可以以任何方式工作。 –

+0

這是一個很好的問題,我很驚訝沒有可以接受的答案。我有完全相同的問題,徘徊什麼是處理它的最好方法。任何建議/幫助非常感謝。 –

回答

3

這並沒有真正解決它,但這是我在這種情況下做的。

我去了一個場景,只是在註釋中標註不同的「場景」。如果您只是將額外的場景標題添加到註釋中,情況正是如此。

這裏是註釋掉第二個方案,並在第一功能

Feature: Admin can manage organizations 
    In order to ... 

Scenario: can add 
    When I log into the admin 
    When I follow "Organizations" 
    When I follow "Add" 

    When I fill in "Email" with "[email protected]" 
    When I fill in "Name" with "Red Cross" 
    When I press "Save" 
    Then I should see "success" 

# Scenario: can edit 
    When I follow "Red Cross" 
    When I fill in "Name" with "Green Cross" 
    When I press "Update" 

    Then I should see "success" 
+0

也許我對這裏的術語不夠熟悉,但不太瞭解你的建議 - 希望你能澄清。特別是,不理解你對「評論」或「場景頭文件」的引用...... –

+0

我添加了一個例子,在其中我註釋了場景頭 –

0

結束測試狀態的運行如果你不想爲每個方案要執行你的背景做榜樣,那麼它不是背景,是嗎?

如果您每次運行黃瓜方案時都打電話給遠程服務,那麼不要那樣做。相反,如http://marnen.github.io/webmock-presentation/webmock.html所述使用Webmock和VCR。您的測試將更快,更準確。

+0

其他測試框架具有OP正在討論的功能。例如,RSpec具有之前(:每個)和之前(:所有)用於此目的(請參閱http://stackoverflow.com/questions/16617052/rails-rspec-before-all-vs-before-each)。所以看起來問題似乎 - 黃瓜也提供這個? –

+0

@agentutah是的,Cucumber具有這種功能,但對於OP的用例來說這是一個壞主意,除非這些場景可以*絕對保證*不改變狀態(至少99%的時間不能改變狀態) 。由於測試正在調用遠程服務,因此他們應該使用Webmock和VCR來消除網絡開銷。換句話說,OP的測試方法有缺陷,應該修正。 –

+1

就Guerkin而言,'背景'代表什麼,你是對的:它不是'背景'。然而,就第一次檢查而言,可讀性「背景」似乎應該只運行一次,並且由於在多個場景之前沒有其他解決方案來運行某些內容,所以許多開發人員都會問同樣的問題並使其錯誤的假設就是'背景'。 Guerkin也許並不打算提供一種編程語言,但是開發人員想要像一樣使用它,因爲它使測試變得更加簡單。 –