2015-05-19 7 views
5

Mam problem z wysłaniem żądania HTTP get w Kątomierzu. W rzeczywistości muszę sprawdzić dane w DB po wykonaniu niektórych działań w interfejsie użytkownika.Jak utworzyć żądanie HTTP GET + POST w Kątomierzu

Będzie to bardzo pomocne, jeśli będę mógł to zrobić za pomocą JQuery, ale nie jestem w stanie znaleźć sposobu użycia JQuery wewnątrz Kątomierza.

Potrzebujesz pomocy!

Właściwie spróbowaliśmy użyć biblioteki NODEJS, jak pokazano poniżej, ale napotykamy na problemy.

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

Po debugowaniu stwierdziliśmy, że problem polega na tym, że protokół nie czeka na zakończenie żądania HTTP i po prostu przekazuje dalej. Najpierw otrzymujemy "2 ---->" w konsoli, a następnie "1 ---->".

+0

żądania Ajax do adresu URL specjalnie dla tej operacji? Nie powinno to być trudne, chociaż nie znam kątomierza – hanshenrik

+0

W rzeczywistości kątomierz jest przeznaczony do testowania E2E dla aplikacji AngularJS. Nie jesteśmy w stanie wykonać żądania Ajax, myślę, że znajomość Kątomierza jest niezbędna do udzielenia odpowiedzi na to pytanie. –

+0

Funkcja "koniec" z log1 jest asynchroniczna, więc logiczne jest po log2 ... –

Odpowiedz

0

Myślę, że nie jest to właściwa odpowiedź, której szukasz. Nie wspomniałeś o tej nazwie bazy danych.

Używam http://frisbyjs.com/ do pobierania dokumentów z couchdb (baza danych dokumentów) w moim projekcie kątomierza i bardzo dobrze spełnia on mój cel.

+0

Używamy wyszukiwarki Elastice jako bazy danych, wystarczy kliknąć URL, aby pobrać dane z tego miejsca. –

+0

spróbuj tego frisby – hasan

3

Nie można uzyskać dostępu do jQuery (to strona frontendowa) z kątomierza, ponieważ zestaw testów kątomierza jest po prostu skryptem NodeJS (jest to strona zaplecza). Możesz więc użyć interfejsu API HTTP NodeJS (lub innej biblioteki żądań).

Sprawdź ten przykład: http://squirrel.pl/blog/2014/01/15/direct-server-http-calls-in-protractor/

+0

Właściwie spróbowaliśmy użyć lib jak pokazano poniżej, ale napotykamy na problemy. var http = require ('http'); –

+0

Zaktualizowałem post powyżej, proszę spojrzeć. –

2

Używam również http moduł (dla różnych celów, dla ponownej inicjalizacji bazy danych).

Aby kątomierza czekać na zakończenie żądania, użycie obiecuje

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

Jeśli nie podoba oddanie wszystkie przetwarzania danych w response.on („end”) zwrotnej, a następnie dokonać zwrotna oddzielna funkcja.

Dodatkowo muszę powiedzieć, że protektor nie jest przeznaczony do bezpośredniego sprawdzania bazy danych. Jest przeznaczony do testów end-to-end. Powinieneś lepiej skompilować złożony scenariusz, który zapisuje dane na jednej ze stron, przejdź do innej strony i spodziewa się, że dane zostaną zaktualizowane.

+1

Aby rozwinąć część dotyczącą oczekiwania Kątomierza, można wykonać kilka czynności. Możesz przekazać funkcję 'done' do' beforeEach' lub 'it', np. 'beforeEach (function (done) {doMyPromiseStuff.then (done)}.} Lub możesz dodać zadanie do przepływu sterowania. Musisz użyć http://angular.github.io/protractor/#/api ? view = webdriver.WebDriver.prototype.call. – Jmr

-1

Co powiesz na coś takiego?

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

Ten post proponuje ponowne wykorzystanie już istniejącego modułu angularjs aby wstawić dane do DB przy użyciu funkcji addMockModule.

To może być zmodyfikowane, aby wstrzyknąć nową mumule AngularJS jako symulację ze wszystkimi potrzebnymi funkcjami, takimi jak sprawdzanie danych, usuwanie danych, itp. Ponieważ jest to kątowy moduł/usługa, powinien on korzystać z modułu http AngularJS Kątomierz będzie wiedział, jak sobie z tym poradzić.

Wady? Cóż, to prawdopodobnie wymaga kontekstu AngularJS do uruchomienia, nie wiem, czy będzie działać w nie-kanciastych aplikacjach (lub ich częściach, jak logowanie nieagularne).

Myśli?

+0

Zamierzam odpowiedzieć na moje własne pytanie i powiedzieć, że jest to prawdopodobnie przesada, myślę, że @NicoPennec miał to poprawne przez cały czas.Link opublikował (http: // wiewiórka .pl/blog/2014/01/15/direct-server-http-calls-in-protractor /) ma dobry przykład. – Falcon

0

Umieściłem to samo pytanie na stronie protokołu Gritomierz, ale nie byli oni w stanie odpowiedzieć na moje pytanie; więc znalazłem alternatywę dla tego. Złożyłem testową sprawę na 2 przypadki testowe. W 1, po prostu kliknąłem przycisk, aw 2 byłem w stanie pobrać json i wykonać walidację na nim.

2

on pracował dla mnie:

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