2016-09-26 9 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メソッドを使用します。これは、セクションの存在を確認するために事前フックを使用することで最も簡単に実現します。

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

しかし、私は1つの質問があります:私は仕様を設定するとき、それは私の既存の 'それはすべてのブロックを通過し、最初に_そして_それはスキップ可能なものを通過しました。期待通りですか?私はそれがスキップ可能なピースを含むトップダウンで動くという印象の下にあった – kmancusi

+0

それは期待されている。例として[実行順序が定義されています](https://relishapp.com/rspec/rspec-core/docs/command-line/order)が上から下に、次にネストされたグループが上から下に表示されます。スキップ可能なテストがネストされたグループにあったとすると、それらは最後に実行されました。テストを特定の順序にする必要がある場合は、ネストを変更することができます。 –

関連する問題