2015-05-19 17 views
5

Sono di fronte a un problema per inviare HTTP ottenere richiesta in Goniometro. In realtà, ho bisogno di controllare i dati in DB dopo aver eseguito qualche azione nell'interfaccia utente.Come effettuare la richiesta HTTP GET + POST in Goniometro

Sarà molto utile se potrò farlo usando JQuery, ma non sono in grado di trovare un modo come usare JQuery all'interno di Goniometro.

Ho bisogno di aiuto !!

In realtà, abbiamo provato a utilizzare la libreria NODEJS come mostrato di seguito, ma con problemi in essa.

var http = require('http'); 

    var json_data; 

    http.get('SiteUrl', function(response) { 
     var bodyString = ''; 
     response.setEncoding('utf8'); 

     response.on("data", function(chunk) { 
      bodyString += chunk; 
     }); 

     response.on('end', function() { 

      json_data = bodyString; 
      console.log("1---->"+json_data); 
     }); 

    }).on('error', function(e) { 
     console.log("There is an error in GET request"); 
    }); 
    console.log("2---->"+json_data); 

dopo il debug, abbiamo trovato che il problema è goniometro non è in attesa per la richiesta HTTP per essere completa e solo passare. Riceviamo "2 ---->" prima in console e poi "1 ---->".

+0

richiesta Ajax a un URL specifico per questa operazione? Non dovrebbe essere difficile, anche se non conosco il goniometro – hanshenrik

+0

In realtà, il goniometro è per il test E2E per l'applicazione AngularJS. Non siamo in grado di fare richiesta Ajax, penso che la conoscenza del goniometro sia essenziale per rispondere a questa domanda. –

+0

La funzione 'fine' con log1 è asincrona, quindi è logico passare dopo il log2 ... –

risposta

0

Penso che non sia la risposta giusta che stai cercando. Non hai menzionato quel nome db.

Sto utilizzando http://frisbyjs.com/ per ottenere documenti da couchdb (database di documenti) nel mio progetto di goniometro e soddisfa molto bene il mio scopo.

+0

Stiamo usando la ricerca Elastice come DB, abbiamo solo bisogno di colpire un URL per recuperare i dati da lì. –

+0

prova questo frisby – hasan

3

Non è possibile accedere a jQuery (è front-end) dal goniometro, perché una suite di test del goniometro è solo uno script NodeJS (è il lato backend). Quindi è possibile utilizzare l'API HTTP NodeJS (o un'altra lib di richiesta).

Controllare questo esempio: http://squirrel.pl/blog/2014/01/15/direct-server-http-calls-in-protractor/

+0

In realtà, abbiamo provato ad usare la lib come mostrato di seguito, ma affrontando problemi in essa. var http = require ('http'); –

+0

Ho aggiornato il post di cui sopra per favore dare un'occhiata. –

2

Io uso anche modulo http (per scopi diversi, per la reinizializzazione del database).

Per rendere goniometro attesa per la fine della richiesta, l'uso promette

var http = require('http'); 

var json_data; 

http.get('SiteUrl', function(response) { 
    var bodyString = ''; 
    response.setEncoding('utf8'); 

    response.on("data", function(chunk) { 
     bodyString += chunk; 
    }); 

    response.on('end', function() { 
     json_data = bodyString; 
     console.log("1---->"+json_data); 
     // All the processing and Angular code should be here 
     console.log("2---->"+json_data); 
    }); 

}).on('error', function(e) { 
    console.log("There is an error in GET request"); 
}); 

Se non ti piace mettere tutta l'elaborazione dati in response.on ('fine') callback, poi fare un callback funzione separata.

Inoltre, devo dire che il goniometro non è destinato a essere utilizzato per controllare direttamente il database. È per test end-to-end. È meglio costruire uno scenario complesso che scrive alcuni dati su una pagina, andare su un'altra pagina e si aspetta che i dati vengano aggiornati.

+1

Per espandere la parte relativa all'attivazione del goniometro, ci sono un paio di cose che puoi fare. Puoi passare una funzione 'done' a' beforeEach' o 'it', ad es. 'beforeEach (function (done) {doMyPromiseStuff.then (done)}'. Oppure puoi aggiungere un'attività al flusso di controllo. Dovrai usare http://angular.github.io/protractor/#/api ? view = webdriver.WebDriver.prototype.call. – Jmr

-1

E qualcosa di simile?

http://eitanp461.blogspot.com.ar/2014/01/advanced-protractor-features.html

Questo post si propone di riutilizzare un modulo AngularJS già esistenti per inserire i dati nel DB con la funzione addMockModule.

Questo potrebbe essere modificato per iniettare un nuovo AngularJS moudule come un finto con tutte le caratteristiche desiderate, come il controllo roba, dati, ecc inseeting Poiché si tratta di un modulo/servizio angolare dovrebbe utilizzare il modulo AngularJS http così Il goniometro saprà come gestirlo.

Svantaggi? Beh, probabilmente questo ha bisogno di un contesto AngularJS per funzionare, non so se funzionerà in applicazioni non angolari (o sezioni di esso, come un login non agile).

Pensieri?

+0

Ho intenzione di rispondere alla mia domanda e di dire che questo è probabilmente eccessivo, penso che @NicoPennec l'abbia corretto tutto il tempo.Il link che ha postato (http: // squirrel .pl/blog/2014/01/15/direct-server-http-calls-in-protractor /) ha un buon esempio. – Falcon

0

Ho pubblicato la stessa domanda sulla pagina del problema Git Goniometro, ma non sono stati in grado di rispondere alla mia domanda; così, ho trovato un'alternativa per questo. Ho rotto il mio caso di test in 2 casi di test. In 1 °, ho appena fatto clic sul pulsante e in 2 ° è stato in grado di recuperare JSON ed eseguire la convalida su di esso.

2

ha funzionato per me:

var request = require('request'); 

var options = { 
    method: 'POST', 
    url: 'http://testurl.com/endpoint/test/', 
    headers: {'id': 'ABCD', 
     'sessionid': 'dummyId', 
     'Accept': 'application/json', 
     'Accept-Language': 'en-us' 
    }, 
    body: '{ "pay_load": [] }' 
}; 

function callback(error, response, body) { 
    if (!error && response.statusCode == 200) { 
     var info = JSON.parse(body); 
     console.log(body); 
     console.log(info); 
    } 
} 

request(options, callback); 
Problemi correlati