Javascript 如何从量角器测试中发出POST请求?
我想在运行测试之前向数据库服务器发出POST请求(使用JSON负载),以便注入测试数据。如果可能的话,我该怎么做呢?可以在量角器配置的onPrepare函数中运行一些异步设置代码。您需要明确地告诉量角器等待您的请求完成。这可以通过flow.await()完成,它可以很好地处理承诺Javascript 如何从量角器测试中发出POST请求?,javascript,angularjs,rest,testing,protractor,Javascript,Angularjs,Rest,Testing,Protractor,我想在运行测试之前向数据库服务器发出POST请求(使用JSON负载),以便注入测试数据。如果可能的话,我该怎么做呢?可以在量角器配置的onPrepare函数中运行一些异步设置代码。您需要明确地告诉量角器等待您的请求完成。这可以通过flow.await()完成,它可以很好地处理承诺 onPrepare: function() { flow = protractor.promise.controlFlow() flow.await(setup_data({data: 'test'})).
onPrepare: function() {
flow = protractor.promise.controlFlow()
flow.await(setup_data({data: 'test'})).then( function(result) {
console.log(result);
})
}
**从prepare上的量角器1.1.0开始,可以返回承诺,因此不需要使用flow
来明确等待承诺的解决
请参阅:在Andres D的帮助下,我找到了一种方法。其要点是通过
浏览器在浏览器中运行脚本。executeAsyncScript
并将脚本插入其中。然后,$http服务被告知发出POST请求。下面是如何制作的咖啡脚本示例:
browser.get('http://your-angular-app.com')
browser.executeAsyncScript((callback) ->
$http = angular.injector(["ng"]).get("$http")
$http(
url: "http://yourservice.com"
method: "post"
data: yourData
dataType: "json"
)
.success(->
callback([true])
).error((data, status) ->
callback([false, data, status])
)
)
.then((data) ->
[success, response] = data
if success
console.log("Browser async finished without errors")
else
console.log("Browser async finished with errors", response)
)
如果只想填充数据库,可以使用另一个库来运行POST请求 例如,您可以在您的
中使用beforeach
,如下所示:
var request = require( "superagent" );
describe( "Something", function() {
beforeEach( function( done ) {
request
.post( "http://localhost/api/foo" )
.send( {data : "something"} )
.end( done );
} );
} );
从量角器执行POST请求的另一种方法是使用“http”
看@AndresD没有别的办法吗?我不介意使用节点http模块,但我不知道如何从Jasmine测试中进行异步调用。不熟悉onPrepare,但这会在整个套件中运行一次吗?我真的需要每个测试设置/拆卸方法。是的,在运行任何测试之前,它只运行一次。听起来onPrepare不会做你想做的事。flow.await似乎在
It
或beforeach
功能中也起作用;我认为,onPrepare
没有任何限制。如果我遗漏了什么,请原谅,但是,等待
期待承诺吗?量角器允许您从onPrepare
函数返回一个承诺,因此您只需执行返回设置数据({data:'test'})代码>。这是在Digrator 1.1.0之前编写的,onPrepare允许您返回承诺。它确实可以简化。第三条线的角度是从哪里来的?。我有未定义的代码。@Ricbermo我面前没有代码,但它是其中的一部分。IIRC该函数在加载页面的上下文中执行(例如,http://your-angular-app.com
),必须已加载角度。
const http = require('http');
const data = yourData;
const options = {
port: portnumber,
hostname: hostname, // without http
path: '/api/path/',
method: 'POST',
headers: {
"content-type": "application/json"
}
};
const request = http.request(options, function (result) {
var body = '';
result.on("data", function (chunk) {
body = body + chunk;
});
result.on("end", function () {
console.log(body);
});
});
request.write(JSON.stringify(data));
request.end();