2012-02-02 125 views
7

我是新來測試多種可能的結果,所以忍耐一下:)水豚/ RSpec的 - 測試與have_content

我想測試一個網頁上的隨機內容。例如,讓我們測試顯示內容'foo'或'bar'的頁面。

喜歡的東西下面就是我想要達到

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

任何想法?

+0

恕我直言,你的問題的標題是有點誤導。它與統計無關。對?稱之爲「測試複雜條件」或其他(我在製作標題時不好)。想想其他人在尋找你的問題的答案。 – 2012-02-02 21:49:14

+0

同意。希望新的頭銜足夠。 – Viet 2012-02-03 02:57:23

回答

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

使用滿意工作。無法讓simple_matcher正常工作,因爲它正在吐出NoMethodErrors。根據我的理解,該方法已被棄用?本來希望使用simple_matcher作爲自定義錯誤消息。無論如何,感謝您的幫助! – Viet 2012-02-02 23:24:33

+1

對,我給你的鏈接已經過時了。對不起:(不知道爲什麼谷歌顯示在頂部,應該更新它:)當前版本是2.8 [RSpec期望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)。 – 2012-02-03 04:58:00

0

我有同樣的問題,但實現這是可能的更容易&增加一個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 

希望這有助於其他視角。最簡單的解決方案通常是最好的。