2012-02-02 29 views
7

Tôi mới để thử nghiệm, hãy chịu theo tôi :)Capybara/RSpec - Thử nghiệm cho nhiều kết quả có thể có has_content

Tôi muốn kiểm tra nội dung ngẫu nhiên trên một trang. Ví dụ: hãy kiểm tra trang để hiển thị nội dung 'foo' hoặc 'bar'.

Cái gì như dưới đây là những gì tôi đang cố gắng để đạt được

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

Bất kỳ ý tưởng?

+0

IMHO tiêu đề câu hỏi của bạn hơi gây hiểu nhầm. Nó không liên quan gì đến thống kê. Đúng? Gọi nó là "thử nghiệm cho điều kiện phức tạp" hoặc bất cứ điều gì (tôi xấu khi làm tiêu đề). Hãy suy nghĩ về những người khác đang tìm kiếm câu trả lời cho câu hỏi của bạn. –

+0

Đồng ý. Hy vọng tiêu đề mới là đủ. – Viet

Trả lời

9

Tôi không biết sẵn sàng sử dụng Mather cho bạn. Nhưng bạn có thể tự nướng.

sử dụng satisfy:

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

hoặc 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 

Edit:has_content chấp nhận regex, vì vậy bạn có thể kiểm tra page.should have_content(/foo|bar/)

+0

Sử dụng làm việc thỏa mãn. Không thể làm cho simple_matcher hoạt động vì nó đã loại bỏ NoMethodErrors. Từ sự hiểu biết của tôi, phương pháp này đã không được chấp nhận? Có thể sử dụng simple_matcher cho thông báo lỗi tùy chỉnh. Dù sao, nhờ sự giúp đỡ! – Viet

+1

Phải, các liên kết tôi đã cung cấp cho bạn khá lỗi thời. Xin lỗi :(Không biết tại sao Google hiển thị nó trên đầu, nên cập nhật nó. :) Phiên bản hiện tại là 2.8 [RSpec Expectations 2.8] (https://www.relishapp.com/rspec/rspec-expectations). Điều gần nhất với simple_matcher là [define matcher] (https://www.relishapp.com/rspec/rspec-expectations/docs/custom-matchers/define-matcher). –

0

Tôi có câu hỏi này tương tự nhưng nhận ra nó là prob ably dễ dàng hơn & linh hoạt hơn để thêm câu lệnh if vào thông số của bạn.

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 

Hy vọng điều này sẽ giúp w/phối cảnh khác. Giải pháp đơn giản thường là tốt nhất.

Các vấn đề liên quan