Cucumber: Instance variable defined in support file not being passed to step definition -


मेरे पास सुविधाओं / समर्थन में फ़ाइल api_extensions.rb है:

  की आवश्यकता होती है 'मेकेनाइज' की आवश्यकता होती है 'जेसन' मॉड्यूल की आवश्यकता होती है ApiExtensions def initialize @agent = Mechanize.new @api_header = {'Accept' = & gt; 'एप्लिकेशन / जेसन', 'कंटेंट-टाइप' = & gt; 'आवेदन / जेएसन'} @ एपीआई_आर्स = {'कैंपस की सूची' = & gt; 'Http://example.com/servicehosts/campus.svc', 'सेटिंग की सूची' = & gt; 'Http://example.com/servicehosts/setting.svc', 'लॉगिन' = & gt; 'Http://example.com/servicehosts/Student.svc/login',} एंड एंड वर्ल्ड (अपिया एक्सटेंशन)   

हालांकि, मुझे अभी भी त्रुटि मिल रही है अपरिभाषित विधि ' [] 'शून्य' के लिए: NilClass (NoMethodError) चरण परिभाषाओं की दूसरी पंक्ति पर फ़ाइल जब मैं ककड़ी चलाता हूं:

  जब / ^ मैं एक वैध उपयोगकर्ता नाम और पासवर्ड $ / do api_uri = @api_uris ['login'] request_body = {: username = & gt; का प्रयोग करके लॉग इन करने का प्रयास करता हूं। "Test1@test.com",: पासवर्ड = & gt; "Testecret"}। To_json @page = @ agent.post (api_uri, request_body, @api_header) अंत   

उदाहरण चर @api_uris क्यों नहीं दिख रहा है इसके बाद भी मैंने अपने मॉड्यूल को दुनिया में जोड़ा है? इसके अलावा, मैंने यह परीक्षण किया है कि मॉड्यूल को उस फाइल में कुछ इंस्ट्रूमेंटेशन जोड़कर निष्पादित किया जा रहा है, इसलिए @ipi_uris सेट किया जा रहा है, यह मेरे चरण के defintions के लिए उपलब्ध नहीं है।

अंत में , अगर मैं स्पष्ट रूप से अपना चरण परिभाषा फ़ाइल की पहली पंक्ति के रूप में ApiExtensions शामिल है, तो यह ठीक काम करता है

धन्यवाद

लेकिन मैंने सोचा कि विश्व (एपीआईएक्सटेंशन) को कॉल करने के लिए अपने मॉड्यूल को सभी चरण परिभाषाओं में शामिल करना था।

समस्या: मेरी समझ यह है कि विश्व (अपी एक्सटेंशन) विश्व वस्तु को बढ़ा रहा है (देखें )। यह एक्सटेंशन ApiExtension विधियों (यानी आपका आरंभ ()) को आपके चरणों के लिए उपलब्ध होगा। इंस्टेंस चर बनाने और अपने सभी चरणों के लिए उपलब्ध होने से पहले आपको अभी भी इनिशियलाइज़ विधि को कॉल करने की ज़रूरत होगी। यदि आप अपने चरण की शुरुआत के लिए आरंभ करें जोड़ते हैं, तो आपका कदम काम करना चाहिए।

समाधान: यदि आप उन आवृत्ति चर को प्रारंभ करते समय प्रारंभ करना चाहते हैं विश्व, आपको अपने मॉड्यूल को इन्हें बदलना चाहिए:

  मॉड्यूल एपीआईएक्सटेंशन डीएफ़ self.extended (obj) obj.instance_exec {@agent = Mechanize.new @api_header = {'Accept' = & gt; 'एप्लिकेशन / जेसन', 'कंटेंट-टाइप' = & gt; 'आवेदन / जेएसन'} @ एपीआई_आर्स = {'कैंपस की सूची' = & gt; 'Http://example.com/servicehosts/campus.svc', 'सेटिंग की सूची' = & gt; 'Http://example.com/servicehosts/setting.svc', 'लॉगिन' = & gt; 'Http://example.com/servicehosts/Student.svc/login',}} एंड एंड   

जब विश्व वस्तु आपके मॉड्यूल के साथ विस्तार कर रही है, तो self.extended (ओबीजे) विधि तुरंत चलेंगे और सभी चर को इनिशियलाइज़ कर देगा, जिससे उन्हें आपके सभी चरणों में उपलब्ध होगा।

Comments

Popular posts from this blog

Python SQLAlchemy:AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema' -

java - How not to audit a join table and related entities using Hibernate Envers? -

mongodb - CakePHP paginator ignoring order, but only for certain values -