2016-09-26 62 views
0

我正在尋找一種方法來基於聲明特定元素的存在來包含或排除特定的it塊。
背景:我有一個煙霧測試,查看元素部分的功能。我希望爲其他功能添加更多測試,但只有(如果頁面上存在特定部分,則爲)。我的想法
僞代碼:Rspec和watir-webdriver;基於斷言運行/跳過測試?

describe 'Smoking sections' do 
    it 'runs test 1' do 
     # does stuff 
    end 
    it 'runs test 2' do 
     # does more stuff 
    end 
    # if foo_section.present? == true do 
     # run additional tests using `it` blocks 
    # else 
     # p "Section not present" 
    # end 
    it 'continues doing more tests like normal' do 
     # does additional tests 
    end 
end 

就是這種過濾可能的?

回答

1

RSpec提供了一些approaches for skipping tests。在這種情況下,您想在示例中使用skip方法。這很容易通過使用before hook來檢查該部分的存在。

require 'rspec/autorun' 

RSpec.describe 'Smoking sections' do 
    it 'runs test 1' do 
    # does stuff 
    end 

    it 'runs test 2' do 
    # does more stuff 
    end 

    describe 'additional foo section tests' do 
    before(:all) do 
     skip('Section not present') unless foo_section.present? 
    end 

    it 'runs additional foo test' do 
     # runs foo test 
    end  
    end 

    it 'continues doing more tests like normal' do 
    # does additional tests 
    end 
end 

雖然你可能要考慮設計你的煙霧測試,以便所有的測試應該運行。如果您有可跳過的測試,它可能會失敗。

+0

謝謝!這正是我期待的。我同意測試不應該被跳過 - 我目前的目標是繼續添加到我目前的煙霧測試中,直到時間更傾向於重構並將其分解爲更小的規格(即更簡潔)的測試。 – kmancusi

+0

我確實有一個問題:當我設置好規格時,它首先通過我現有的所有「塊」塊,然後通過可跳過的塊。這是否如預期的那樣?我的印象是它會自上而下運行,包括可跳過的部分 – kmancusi

+0

這是預期的。 [執行順序被定義](https://relishapp.com/rspec/rspec-core/docs/command-line/order)作爲例子從上到下,然後從上到下嵌套組。鑑於可跳過的測試是在一個嵌套組中,他們跑到最後。如果您需要將測試按特定順序進行,您可以更改嵌套。 –