繁体   English   中英

如何从量角器测试中发出 POST 请求?

[英]How can I make a POST request from a Protractor test?

我想在运行量角器测试之前向数据库服务器发出 POST 请求(带有 JSON 有效负载),以便注入测试数据。 如果可能的话,我该怎么做?

如果您只想填充数据库,则可以使用另一个库来运行 POST 请求。

例如,您可以在beforeEach使用superagentbeforeEach所示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM