2014-09-25 1 views
6

Ho (penso) tipo di problema univoco con js. Sto scrivendo dei test usando roba protractor e Jasmine e ho bisogno di condividere i dati tra i file js. C'è un modo per farlo? Tutte le soluzioni che ho trovato sono per pagine web e io uso solo i file js.Come condividere i dati tra file javascript?

Non vedo l'ora di una rapida risposta, se mancano informazioni, fatemelo sapere e lo aggiungerò immediatamente.

+2

Non ho ancora usato il goniometro, ma con karma e gelsomino, puoi condividere i dati usando requirejs. Se vuoi posso dare qualche dettaglio in più. – kihu

+0

Per quanto ne so posso usare solo: API protractor, API Selenium, Jasmine, JS. Non è il mio progetto privato, quindi sfortunatamente non posso usare altre cose. A MENO, ho capito che hai torto e questo è "incorporato" in js. @Edit: Aspetta, vuoi dire che requirejs è integrato in Jasmine? Se sì, allora con tutti i mezzi elaborare. –

+0

no, requirejs è una libreria saparate http://requirejs.org/ – kihu

risposta

6

Non ho provato io stesso, ma forse si può provare a mettere roba in ambito globale utilizzando:

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

fammi sapere se funziona.

+1

Mi piace, semplice ed efficace Andres !. Curioso: perché non utilizzare 'browser.params' anziché globale? In realtà utilizzo entrambi i metodi: 'browser.params' per i dati di configurazione di test condivisi immutabili mentre' global.testState' quando ho bisogno di eseguire i dati di test come la posizione x, y di un elemento per testarlo, ad esempio, per ridimensionarlo. –

+0

Andres, btw, ci sono un sacco di domande senza risposta nel tag 'goniometro ', spero che tu ti mostri più spesso e aiuti qui. Inoltre, come posso ottenere una t-shirt con goniometro come se stessi indossando il meetup? :) – alecxe

+0

Holly molly, funziona davvero. Molte grazie! Una soluzione così semplice. –

1

C'è un modo semplice per condividere dati e anche funzioni tra i file JavaScript spec. Protractor. Funzionano in node.js con un modo integrato per definire i moduli e utilizzarli e riutilizzarli - http://nodejs.org/docs/latest/api/modules.html.

Supponendo stracture la seguente cartella:

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

In utils.js:

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

In 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

ho incluso nel mio file di js config in cui dichiaro la mia variabili per goniometro.

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

Utilizzo in altro file è come:

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

Se è necessario condividere i dati dinamici tra i file è possibile anche effettuare le seguenti operazioni. Ecco un esempio funzionante. Quello che dovevo fare era prendere parti dell'URL e usarle su file diversi.

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); 
    }); 

ho semplicemente assegnati i valori che avevo bisogno di usare in altri file al browser.params. Quindi nei miei altri file posso accedervi in ​​questo modo

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

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

@Nice e soluzione semplice! –