2014-04-15 8 views
5

में स्ट्रिंग ऑब्जेक्ट के विरुद्ध है_इलेक्टर का उपयोग करके मैं lib/निर्देशिका के अंदर एक फ़ाइल पर एक spec लिख रहा हूं। और एक HTML स्ट्रिंग वहाँ रिटर्न में अपने तरीकों में से एक है, लेकिन फिर मैं की तरह कुछ प्रयास करें:Rails + RSpec

expect(subject).to have_selector("p:eq(1)") do |first_p| 

और यह मुझे निम्न त्रुटि देता है:

Failure/Error: expect(subject).to have_selector("p:eq(1)") do |first_p| 
NoMethodError: 
    undefined method `has_selector?' for #<String:0x007f93798a8338> 

मैं इस को हल करने के कर सकते हैं? क्या मुझे स्ट्रिंग ऑब्जेक्ट को किसी अन्य विशिष्ट ऑब्जेक्ट से लपेटना चाहिए? मैंने नोकोगिरी :: HTML.fragment() के साथ प्रयास किया है लेकिन यह न तो काम नहीं करता है। मुझे लगता है कि मुझे इसे कुछ हथियार की वस्तु या उस तरह से कुछ लपेटना चाहिए, लेकिन मुझे नहीं पता कि वहां कैसे जाना है। अग्रिम में धन्यवाद।

+0

मैं समाधान मिला::

include Webrat::Matchers 

तो अंतिम उदाहरण जैसा दिखाई देगा http://stackoverflow.com/questions/ 20609043/अपरिभाषित-विधि-चयनकर्ता-के लिए-rspec-decorators # comment30881536_20621240 - मैंने उत्तर के साथ मूल प्रश्न अपडेट किया है। – leandroico

+0

कूल। समाधान साझा करने के लिए धन्यवाद। –

+0

मैंने प्रश्न से अपने (पुराने) समाधान को हटा दिया और इस प्रश्न धागे के उत्तर के रूप में एक बेहतर पोस्ट किया। अब यह सही समाधान की तरह लगता है। – leandroico

उत्तर

1

मैं type: :view समाधान है कि मैंने पहले की खोज की उपयोग के बारे में बहुत संतुष्ट महसूस नहीं किया था इस धागे में, यह एक बहुत ही मान्य है। बात यह है कि lib/ निर्देशिका के अंदर एक फ़ाइल के लिए मेरी कल्पना वास्तव में एक दृश्य कल्पना के रूप में नहीं माना जाना चाहिए।

तो मैंने इंटरनेट पर कुछ और शोध किया और मुझे पता चला कि मेरे लिए बेहतर दृष्टिकोण है।

तो इस धागे में मूल उदाहरण पर विचार करना। आप बस अपनी वर्णन ब्लॉक के अंदर निम्न पंक्ति जोड़ना चाहिए:

describe MyApp::UI::MyDecoratorClass do 
    include Webrat::Matchers 
    # ... 
end 
1

मान लें कि आप has_selector? विधि प्राप्त करने के लिए कैपिबरा का उपयोग कर रहे हैं, तो आप has_selector? विधि तक पहुंच प्राप्त करने के लिए अपना परिणाम Capybara.string(...) में लपेटना चाहेंगे।

expect(subject).to have_selector("p:eq(1)") 

करने के लिए::

तो अपने परीक्षण से जाना चाहिए

result = Capybara.string(subject) 
expect(result).to have_selector("p:eq(1)") 

प्रलेखन: http://rdoc.info/gems/capybara/Capybara#string-class_method

+0

यदि मेरा ऐप स्टैक मेरे लोड किए गए रत्नों के बीच कैपिबरा समेत था तो यह एक अच्छा समाधान होगा। हम इस बिंदु पर इसका उपयोग नहीं कर रहे हैं। – leandroico

+0

मुझे अभी एक अच्छा समाधान मिला है, क्रिस, दूसरे जवाब की जांच करें। – leandroico