2012-02-02 7 views
7

で複数の可能な結果のテスト私はテストに新たなんだ、そう私と一緒にクマ:)カピバラ/ RSpecの - have_content

私は、ページ上のランダムなコンテンツをテストしたいと思います。たとえば、 'foo'または 'bar'のいずれかのコンテンツを表示するページをテストしてみましょう。以下のような

何かが、私は

page.should (have_content('foo') || have_content('bar')) 

任意のアイデアを実現しようとしている何ですか?

+0

あなたの質問のタイトルは少し誤解を招くものです。それは統計とは関係ありません。右?それを「複雑な状態をテストする」か何でも(私はタイトルを作るのが悪い)と呼んでください。あなたの質問に対する答えを探している他の人について考えてみてください。 –

+0

合意。新しいタイトルが十分であることを願っています。 – Viet

答えて

9

ご使用の準備ができていませんMatherです。しかし、あなたは自分自身を焼くことができます。 satisfyを使用して

page.should satisfy {|page| page.has_content?('foo') or page.has_content?('bar')}

またはsimple_matcher

def have_foo_or_bar 
    simple_matcher("check content has foo or bar") { |page| page.has_content?('foo') or page.has_content?('bar') } 
end 

describe page 
    it "should have foo or bar" do 
    page.should have_foo_or_bar 
    end 
end 

編集:has_contentは正規表現を受け入れ、あなたがpage.should have_content(/foo|bar/)

+0

使用して満足しています。 NoMethodErrorsを吐き出すので、simple_matcherを動作させることができませんでした。私の理解から、メソッドは廃止されましたか?カスタムエラーメッセージにsimple_matcherを使用することをお勧めします。とにかく、助けてくれてありがとう! – Viet

+1

私があなたに与えたリンクは、時代遅れです。申し訳ありません:(Googleがそれを上に表示する理由を知らない、それを更新する必要があります:)現在のバージョンは2.8 [RSpec Expectations 2.8](https://www.relishapp.com/rspec/rspec-expectations)です。 simple_matcherに最も近いのは[define matcher](https://www.relishapp.com/rspec/rspec-expectations/docs/custom-matchers/define-matcher)です。 –

0

を確認することができますので、私はこれと同じ質問があったが実現それはprobですあなたの仕様にif文を追加する方がより簡単に&弾力性があります。

it 'can complete my incredible form' do 
    visit '/testing_path' 
    #...dostuff... 

    if object_im_testing.contains_my_condition? 
    current_path.should eq('/special_condition_url') 
    else 
    current_path.should eq('/normal_condition_url') 
    end 
end 

これは、別の見通しに役立ちます。最も簡単な解決法が通常最高です。

関連する問題