[英]How can I make a POST request from a Protractor test?
如果您只想填充数据库,则可以使用另一个库来运行 POST 请求。
例如,您可以在beforeEach
使用superagent , beforeEach
所示:
var request = require( "superagent" );
describe( "Something", function() {
beforeEach( function( done ) {
request
.post( "http://localhost/api/foo" )
.send( {data : "something"} )
.end( done );
} );
} );
在 Andres D 的帮助下,我找到了一种方法。它的要点是通过browser.executeAsyncScript
在浏览器中运行一个脚本,并在其中注入$http 服务。 然后告诉 $http 服务发出一个 POST 请求。 这是如何完成的示例 CoffeeScript:
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)
)
可以在量角器配置的 onPrepare 函数中运行一些异步设置代码。 您需要明确告诉量角器等待您的请求完成。 这可以通过 flow.await() 来完成,它与 Promise 配合得很好。
onPrepare: function() {
flow = protractor.promise.controlFlow()
flow.await(setup_data({data: 'test'})).then( function(result) {
console.log(result);
})
}
** 由于protractor 1.1.0 on prepare 可以返回一个promise,所以使用flow
来显式等待promise 解析是不必要的。
请参阅: https : //github.com/angular/protractor/blob/master/CHANGELOG.md
从量角器执行 POST 请求的另一种方法是使用“http”
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.