2012-06-06 78 views
1

我想知道是否有任何方式使用和不使用而無需複製代碼JavaScript的運行黃瓜情況下運行黃瓜場景。如何使用和不使用的JavaScript代碼,避免重複

我開發利用html5導航的網站。但是,如果瀏覽器不支持html5功能,它應該可以找到。

我想編寫黃瓜測試,將測試導航。 我知道我可以用簡單的黃瓜場景來測試基本的html導航。我可以使用相同的場景測試html5導航,但使用@javascript標記。

我更喜歡以避免此代碼重複。 我周圍掛鉤嘗試,希望我可以簡單的調用塊,然後調用相同的塊與

Capybara.using_driver(Capybara.javascript_driver) { block.call } 

然而,這是行不通的。

任何人有任何想法如何實現這一點?

P.S. 我對Ruby很新,剛開始使用黃瓜。

回答

1

看起來你需要兩種不同的場景。我會使用Background功能來避免步驟定義,但這是一個品味問題。

0

如果你不想創建單獨的功能來處理這兩種類型的瀏覽器,那麼一個解決方案是使用一個環境變量來告訴黃瓜使用的瀏覽器驅動器的類型,並調用黃瓜的兩倍。

你需要查詢的環境變量設置正確的驅動程序,很可能在env.rb

if ENV['USE_JS_DRIVER'] 
    Capybara.current_driver = Capybara.javascript_driver 
end 

然後你既可以運行/兩個:

cucumber . 
USE_JS_DRIVER=1 cucumber . 

你必須找到一些合併黃瓜運行結果的有用方法,但根據您的需求,這可能是比複製場景更簡單的解決方案。

+0

我想我寧願寫預處理器,可以提取需要有和沒有@javascript執行步驟。這種方式的覆蓋率將是一致的 – acube

+0

剛剛使用這種方法在頭幾個小時,我的頭撞在桌子上。只有第一個方案使用javascript_driver(如果沒有@javascript標記)運行,因爲current_driver在下一個方案運行之前重置爲default_driver。如果你想所有的場景與javascript_driver運行,那麼你需要設置default_driver Capybara.default_driver = Capybara.javascript_driver –

1

基於由Jon中號使用環境變量的解決方案,需要每個場景運行之前(這似乎不是改變default_driver更好)設置current_driver。

Before do 
    if ENV['USE_JS_DRIVER'] 
    Capybara.current_driver = Capybara.javascript_driver 
    end 
end 

,然後運行

cucumber . 
USE_JS_DRIVER=1 cucumber .