2011-10-07 9 views
11

मैं एक अनुरोध spec लिख रहा हूं और स्ट्रिंग "रिपोर्ट» एजिंग रिपोर्ट्स "की उपस्थिति के लिए परीक्षण करना चाहता हूं। मैं एक त्रुटि (अवैध multibyte वर्ण) प्राप्त करता है, तो मैं सीधे अपनी मिलानकर्ता अभिव्यक्ति में चरित्र में डाल, तो मैं यह करने की कोशिश की:पेज सामग्री में एचटीएमएल इकाइयों के लिए आरईपीसी परीक्षण

expected there to be content "Reports » Aging Reports" in "\n Reports » Aging Reports\n

मैं: page.should have_content("Reports » Aging Reports")

यह संदेश के साथ परीक्षण में विफल रहता है मैंने सफलता के बिना .html_safe जैसी चीजों की कोशिश की है। क्या एचटीएमएल इकाइयों वाले पाठ के लिए परीक्षण करने का कोई तरीका है?

संपादित करें:

find('#breadcrumbs').text.should match(/Reports . Aging Reports/):

<a href="/reports">Reports</a> &raquo; <a href="/aging_reports">Aging Reports</a>

+0

कि संभावना है क्योंकि HTML स्रोत एक '» 'और नहीं एक' '» होता है और चीजों को बस काम ...। एचटीएमएल बदलें ताकि आप ''' '' '' '' '' का उपयोग कर सकें। वास्तविक प्रस्तुत एचटीएमएल क्या है? क्या HTML स्रोत का '» 'हिस्सा है या इसे HTML स्रोत में '»' के रूप में परिभाषित किया गया है? कृपया हमें स्रोत एचटीएमएल दिखाएं। सुनिश्चित नहीं है कि "अपेक्षित" '»' के बजाय '»' क्यों दिखा रहा है। – Zabba

+0

एचटीएमएल वास्तव में » » » इकाई का एक और रूप है जिसकी मैंने कोशिश की, लेकिन मैंने सवाल अपडेट कर लिया है। – MWean

+0

ऐसा लगता है कि आरएसपीईसी आपके लिए '»' को '»' में परिवर्तित कर रहा है। अपने परीक्षण में वास्तविक चरित्र को शामिल करने का प्रयास करें। – thomasfedb

उत्तर

1

मैं समय के लिए एक समाधान पाया जा रहा है कि एक स्ट्रिंग के बजाय एक regex का उपयोग करता है:

यहाँ html स्रोत के संबंधित क्षेत्र है

यह breadcrumbs div का पाठ प्राप्त करता है, जिसमें टेक्स्ट I ' मैं देख रहा हूं, इसलिए मैच का दायरा सीमित है। यह ठीक काम करता है, लेकिन मुझे अभी भी यह जानना अच्छा लगेगा कि विशिष्ट एचटीएमएल इकाइयों से कैसे मिलान किया जाए।

breadcrumb = '<a href="/reports">Reports</a> &raquo; <a href="/aging_reports">Aging Reports</a>' 
page.body.should include(breadcrumb) 
expect(page.body).to include(breadcrumb) # rspec 2.11+ 
ही कहा मुझे यकीन है कि सबसे सुरुचिपूर्ण समाधान है नहीं कर रहा हूँ के साथ

:

6

तुम भी अपने पृष्ठ के कच्चे स्रोत पर परीक्षण देख सकते हैं। मान लिया जाये कि वहाँ एक वर्ग .breadcrumb अपने लिंक आप बस को मान्य कर सकता है लिंक div के भीतर मौजूद हैं चारों ओर नामित है:

within '.breadcrumb' do 
    page.should have_css('a', text: 'Reports') 
    page.should have_css('a', text: 'Aging Reports') 
    expect(page).to have_css('a', text: 'Reports') # rspec 2.11+ 
    expect(page).to have_css('a', text: 'Aging Reports') # rspec 2.11+ 
end 

इस तरह आप स्पष्ट रूप से एक href के ब्रेडक्रम्ब ब्लॉक के भीतर के लिए देख रहे हैं।

3

html_safe यदि आप चाहते हैं तो HTML टैग को नहीं हटाते हैं।

यदि आप परीक्षण करने से पहले एचटीएमएल टैग हटा देंगे तो आप sanitize मणि का उपयोग कर सकते हैं।

# in Gemfile 
gem 'sanitize' 

# in testfile 
require 'sanitize' 
html = Sanitize.clean(page.body.text) 
html.should have_content("Reports &raquo; Aging Reports") 
0

कभी कभी आसान समाधान सही एक

page.should have_content("Reports » Aging Reports") 
संबंधित मुद्दे