2014-09-25 8 views
6

मेरे पास (मुझे लगता है) जेएस के साथ अनूठी समस्या है। मैं प्रोटैक्टर सामग्री और जैस्मीन का उपयोग करके परीक्षण लिख रहा हूं और मुझे जेएस फाइलों के बीच डेटा साझा करने की आवश्यकता है। क्या उसे करने का कोई तरीका है? मेरे द्वारा मिले सभी समाधान वेबपृष्ठों के लिए हैं और मैं सिर्फ जेएस फाइलों का उपयोग करता हूं।जावास्क्रिप्ट फ़ाइलों के बीच डेटा कैसे साझा करें?

मैं अपने तेज प्रतिक्रिया के लिए तत्पर हैं, याद आ रही किसी भी जानकारी नहीं है अगर, तो कृपया मुझे बताएं और मैं इसे तुरंत जोड़ देंगे।

+2

मैंने अभी तक प्रोटैक्टर का उपयोग नहीं किया है, लेकिन कर्म और जैस्मीन के साथ, आप requjs का उपयोग कर डेटा साझा कर सकते हैं। यदि आप चाहते हैं तो मैं कुछ और विवरण दे सकता हूं। – kihu

+0

जहां तक ​​मुझे पता है मैं केवल उपयोग कर सकता हूं: प्रोटैक्टर एपीआई, सेलेनियम एपीआई, जैस्मीन, जेएस। यह मेरी निजी परियोजना नहीं है इसलिए दुर्भाग्य से मैं अन्य सामानों का उपयोग नहीं कर सकता। असल में, मैंने आपको गलत समझा और यह "जेएस में बनाया गया" है। @ एडिट: रुको, आपका मतलब है कि आवश्यकताएं जैस्मीन में बनाई गई हैं? यदि हां, तो हर तरह से विस्तृत करें। –

+0

नहीं, requirejs एक saparate पुस्तकालय http://requirejs.org/ – kihu

उत्तर

6

मैं इस अपने आप को परीक्षण किया है नहीं है, लेकिन हो सकता है आप वैश्विक क्षेत्र का उपयोग करने में सामान रखने का प्रयास कर सकते हैं:

global.mySharedData = {someKey: 'some value'} 

// in one of your test files 
it('should do something', function() { 
    global.mySharedData = {someKey: 'some value'} 
}); 

... 

// This is in another test suite 
it('should do something', function() { 
    var valueFromFirstTest = global.mySharedData.someKey; 
}); 

http://nodejs.org/api/globals.html

मुझे पता है अगर यह काम करता है।

+1

मुझे यह पसंद है, सरल और प्रभावी एंड्रेस! उत्सुक: वैश्विक के बजाय 'browser.params' का उपयोग क्यों नहीं कर रहे हैं? मैं वास्तव में दोनों दृष्टिकोणों का उपयोग करता हूं: 'global.testState' के दौरान अपरिवर्तनीय साझा परीक्षण कॉन्फ़िगरेशन डेटा के लिए' browser.params', उदाहरण के लिए, इसका आकार बदलने के लिए किसी तत्व के x, y स्थान जैसे परीक्षण परीक्षण डेटा को पकड़ने की आवश्यकता होती है। –

+0

एंड्रेस, बीटीडब्ल्यू, 'प्रोटैक्टर' टैग में बहुत से अनुत्तरित प्रश्न हैं, आशा है कि आप अधिक बार दिखाएंगे और यहां सहायता करेंगे। साथ ही, मैं एक प्रोटैक्टर टी-शर्ट कैसे प्राप्त कर सकता हूं जैसे आप मिलते-जुलते पहने हुए थे? :) – alecxe

+0

होली मल्ली, यह वास्तव में काम करता है। आपका बहुत बहुत धन्यवाद! इतना आसान समाधान। –

1

डेटा और Protractor कल्पना JavaScript फ़ाइलों के बीच भी काम करता है साझा करने के लिए एक सरल तरीका है। http://nodejs.org/docs/latest/api/modules.html - वे एक अंतर्निहित तरीका मॉड्यूल को परिभाषित करने और उपयोग करने के लिए और उन्हें पुन: उपयोग करने के साथ node.js में चलाते हैं।

निम्न फ़ोल्डर के stracture मान लिया जाये:

o e2e 
|-- utils.js 
|-- a-spec.js 
|-- b-spec.js 

utils.js में:

exports.sharedData = { num: 42, str: 'hi' }; 
exports.foo = function (x) { return x + 1; }; 

a-spec.js में:

var utils = require('./utils.js'); // Note './' 

describe("The a page", function() { 
    it("should give the ultimative answer", function() { 
     expect(element(by.binding("answer")).getTest()) 
      .toBe(utils.sharedData.num); // Using shared data 
    }); 
}); 
1

मैं अपने config js फ़ाइल जहां मैं अपने चर घोषित में शामिल किया प्रोटैक्टर के लिए। अन्य फ़ाइल में

(function() { 
    this.defaultPassword = function() { 
     return 'superPassword'; 
    }; 
}()); 

प्रयोग की तरह है:

var userLogin = { 'Email': '[email protected]', 'Password': defaultPassword }, 
1

आप फ़ाइलों के बीच गतिशील डेटा साझा करने के लिए भी कर सकते हैं की जरूरत है। यहां एक कामकाजी उदाहरण है। मुझे जो करना है वह यूआरएल के कुछ हिस्सों को लेना था और विभिन्न फाइलों में उनका इस्तेमाल करना था।

it('should click on one of the clickable profiles', function(){ 

     //Get entity type and entity id before clicking the link 
     tableEls.get(1).all(by.xpath('./td')).get(0).element(by.xpath('./a')).getAttribute('href').then(function(text){ 

      var hrefTokens = text.split('/'); 
      var entityID = hrefTokens[ hrefTokens.length - 1 ]; 
      var entityType = hrefTokens[ hrefTokens.length - 2 ]; 

      browser.params.entityID = entityID; 
      browser.params.entityType = entityType; 
     }); 

     tableEls.get(1).all(by.xpath('./td')).get(0).element(by.xpath('./a')).click(); 
     browser.sleep(2000); 
    }); 

मैं बस मूल्यों है कि मैं browser.params को अन्य फ़ाइलों में उपयोग करने के लिए आवश्यक सौंपा। तो मेरी अन्य फाइलों में मैं उन्हें

it('Retrieving JSON Data ...', function(){ 

     var entityID = browser.params.entityID; 
     var entityType = browser.params.entityType; 
    }); 
+0

@ नाइस और सरल समाधान! –

संबंधित मुद्दे