Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从量角器测试中发出POST请求?_Javascript_Angularjs_Rest_Testing_Protractor - Fatal编程技术网

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

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'})).

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

可以在量角器配置的onPrepare函数中运行一些异步设置代码。您需要明确地告诉量角器等待您的请求完成。这可以通过flow.await()完成,它可以很好地处理承诺

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();