फ़ेकर आपके लिए कोई एन्कोडिंग नहीं करेगा। यह आपको O'Malley
जैसी स्ट्रिंग देगा। लेकिन प्रतिक्रिया में HTML escaping (या प्रारूप के आधार पर कुछ अन्य प्रकार) होना चाहिए, जैसे O'Malley
। सुनिश्चित करने के लिए आप हमेशा puts response.body
कर सकते हैं।
आरएसपीसी matches
मैचर वास्तव में for either expected
or actual
to be a regular expression डिज़ाइन किया गया है, लेकिन आपके मामले में दोनों तार हैं। क्योंकि कोड has an optimization calling values_match?
जो does a simple comparison है, आप प्रभावी रूप से expect(response.body).to eq(@thing.name)
कह रहे हैं।
यदि आप नियमित अभिव्यक्ति चाहते हैं, तो आप सही हैं कि इसे अनियंत्रित मानों का उपयोग करके सावधान रहना चाहिए। सौभाग्य से रूबी के लिए Regexp.escape
है, तो आप Regexp.new("foo" + Regexp.escape(@thing.name) + "bar")
कह सकते हैं। लेकिन आपके आपत्ति से include
पर, ऐसा लगता है कि आप वास्तव में प्रतिक्रिया के अलावा कुछ भी नहीं चाहते हैं, सही? उस स्थिति में, आपको बिल्कुल रेगेक्स की आवश्यकता नहीं है।
किसी भी मामले में, समस्या के बारे में नाम के बारे में नहीं है, लेकिन नाम कैसे बच निकला है। तो तुलना करने से पहले आपको या तो (1) प्रतिक्रिया को डीकोड करना चाहिए या (2) फ़कर स्ट्रिंग को एन्कोड करना चाहिए। यह वास्तव में कोई फर्क नहीं पड़ता। दोनों बहुत आसान कर रहे हैं:
expect(CGI.unescapeHTML(response.body)).to eq @thing.name
या
expect(response.body).to eq CGI.escapeHTML(@thing.name)
स्वाभाविक रूप से, अगर आप अपनी प्रतिक्रिया JSON है, तो आप इस सभी HTML JSON के साथ सामान से बचने, आदि
स्रोत
2017-01-30 20:35:58
मुझे उत्सुकता है कि आपको ऐसा क्यों लगा कि मेरा जवाब पर्याप्त नहीं था। मैं कुछ भी स्पष्ट कर सकता हूँ? –
इसमें शामिल समस्या यह है कि यदि इसमें "इसमें शामिल है", तो मैं इसे पूरी तरह से मिलान करना चाहता हूं और न कि केवल नाम के भीतर "मौजूद" शब्द। हालांकि मैं इसे फॉलबैक के रूप में उपयोग कर सकता हूं, जिसमें बीमार आपके उत्तर को सही चिह्नित करता है :)। मैं वास्तव में बस अन्य संभावनाओं की तलाश करने की कोशिश कर रहा हूँ। – msmith1114