我想在运行Protractor测试之前向数据库服务器发出POST请求(带有JSON有效负载),以便注入测试数据。如果可能的话,我怎么能这样做呢?
答案 0 :(得分:6)
如果您只想填充数据库,可以使用其他库来运行POST请求。
例如,您可以在beforeEach
中使用superagent,例如:
var request = require( "superagent" );
describe( "Something", function() {
beforeEach( function( done ) {
request
.post( "http://localhost/api/foo" )
.send( {data : "something"} )
.end( done );
} );
} );
答案 1 :(得分:5)
在Andres D的帮助下,我找到了一种方法。它的要点是通过browser.executeAsyncScript
在浏览器中运行脚本并在其中注入$http service。然后告知$ 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)
)
答案 2 :(得分:3)
可以在量角器配置的onPrepare函数中运行一些异步设置代码。您需要明确告诉量角器等待您的请求完成。这可以通过flow.await()完成,它与promises一起玩得很好。
onPrepare: function() {
flow = protractor.promise.controlFlow()
flow.await(setup_data({data: 'test'})).then( function(result) {
console.log(result);
})
}
**从准备器1.1.0开始,prepare可以返回一个promise,因此使用flow
来明确地等待解析的承诺是不必要的。
请参阅:https://github.com/angular/protractor/blob/master/CHANGELOG.md
答案 3 :(得分:0)
从量角器发出POST请求的另一种方法是使用“ http”
import 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();