如何在量angular器中进行HTTP GET + POST请求
我面临着在量angular器中发送HTTP请求的问题。 实际上,我需要在UI中执行一些操作后检查数据库中的数据。
这将是非常有用的,如果我能够使用JQuery做到这一点,但我无法find如何在量angular器内使用JQuery的方法。
需要帮忙 !!
实际上,我们尝试使用如下所示的NODEJS库,但是面临着一些问题。
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);
debugging完成后,我们发现问题在于,Protractor并没有等待HTTP请求完成,只是传递。 我们先在控制台中得到“2 —->”,然后是“1 —->”。
您不能从量angular器访问jQuery(它是前端),因为量angular器testing套件只是一个NodeJS脚本(它是后端)。 所以你可以使用NodeJS HTTP API(或其他请求库)。
检查这个例子: http : //squirrel.pl/blog/2014/01/15/direct-server-http-calls-in-protractor/
我也使用http模块(为了不同的目的,重新初始化数据库)。
要使量angular器等待结束请求,请使用promise
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"); });
如果你不喜欢把所有的数据处理放到response.on('end')callback函数中,那么使callback函数成为一个单独的函数。
另外我不得不说,量angular器不是用来直接检查数据库的。 这是为了进行端到端的testing。 您应该更好地构build一个复杂的场景,将一些数据写入其中一个页面,转到另一个页面,并期望数据被更新。
它为我工作:
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);
我认为这不是你正在寻找的正确答案。 你还没有提到这个db名字。
我正在使用http://frisbyjs.com/从量angular器项目中的couchdb(文档数据库)中获取文档,并且非常好地达到了我的目的。
我在量angular器的git问题页面上发布了同样的问题,但他们无法回答我的问题。 所以,我find了一个替代scheme。 我把testing用例分成了两个testing用例。 在第一,我只是点击button,在第二我能够获取json并对其执行validation。
这样的事情呢?
http://eitanp461.blogspot.com.ar/2014/01/advanced-protractor-features.html
这篇文章build议重用已经存在的AngularJS模块,使用addMockModule函数将数据插入到数据库中。
这可以修改为注入一个新的AngularJS模块作为模拟与所有你想要的function,如检查的东西,数据等等。因为这是一个angular度模块/服务,它应该使用AngularJS http模块,因此量angular器将知道如何处理它。
缺点是什么? 那么这可能需要一个AngularJS的上下文来运行,不知道它是否会在非angular度的应用程序(或其中的部分,如一个非agularlogin)的工作。
思考?