2012-07-08 44 views
0

我正在編寫一個Rails 3.1應用程序,並且我有一組三個黃瓜功能文件。當單獨運行時,如:黃瓜:每個功能單獨通過,但不能在一起

cucumber features/quota.feature 
-- or -- 
cucumber features/quota.feature:67 # specifying the specific individual test 

...每個功能文件運行良好。但是,當全部一起運行時,如:

cucumber 

...其中一個測試失敗。這很奇怪,因爲只有一個測試失敗;特徵中的所有其他測試都通過了(其中許多測試都是類似的)。這似乎不在我放置此測試的功能文件中的哪個位置;如果它是第一個測試或者某個地方的話,它就會失敗。

我不認爲它可以是測試本身,因爲它在單獨運行時或者在整個功能文件單獨運行時通過。看起來它一定是與將不同的功能文件一起運行相關的一些效果。任何想法可能會發生什麼?

回答

3

看起來你的方案之間有一個耦合。您的失敗情景假定系統處於某種狀態。當場景單獨運行時,系統處於此狀態並且場景經過。但是,當您運行所有場景時,之前運行的場景會更改此狀態,因此失敗。

你應該通過讓你的場景完全獨立來解決它。任何場景的工作都不應該影響其他場景的結果。在Cucumber BookSpecification by Example中受到高度鼓勵。

+0

嗨安德烈,它必須是功能文件之間耦合的效果,而不是場景,因爲每個功能文件中的所有場景都在單獨運行時運行。這是我從未聽說過的。 – 2012-07-08 23:04:20

+0

@notthequestionyourelookingfor也許你有不同的功能文件中的方案之間的耦合。 – 2012-07-08 23:19:11

+1

這種耦合可能是由於數據在其他功能中的某個場景之後沒有被正確重置。最有可能的是,它在一開始就不會運行的原因是因爲其他情況之一是數據處於不良狀態。或者,您可能需要檢查以確保在單獨運行時不使用命令行標誌,而只是在調用黃瓜時不使用命令行標誌。 – 2012-07-10 13:55:23

0

我有一個類似的問題,我花了很長時間才弄清楚根本原因。 我正在使用@ selenium標籤在selenium客戶端上測試JQuery腳本。 我的頁面有一個發送POST請求的ajax調用。我在javascript中發現了一個錯誤,並且發佈請求失敗。 (該功能尚未完成,並且我還沒有編寫驗證ajax調用結果的步驟。) 此錯誤記錄在Capybara.current_session.server.error中。 當下列非硒功能是內水豚執行的鉤之前稱爲Capybara.reset_sessions! 然後,這稱爲

def reset! 
    driver.reset! if @touched 
    @touched = false 
    raise @server.error if @server and @server.error 
ensure 
    @server.reset_error! if @server 
end 

@server.error不是爲在以下特徵(多個特徵)的每個場景零和黃瓜報告的每個步驟中跳過。 我的解決方案是解決ajax調用。 所以Andrey Botalov和Doug Noel是對的。我從一個早期的功能繼承。 我不得不繼續調試,直到找到正在引發的異常並調查產生的異常。 我希望這可以幫助那些沒有意識到他們已經從早期功能繼承的人。