web-dev-qa-db-ja.com

分度器テストからPOSTリクエストを行うにはどうすればよいですか?

テストデータを挿入するために、 分度器 テストを実行する前に、データベースサーバーにPOSTリクエスト(JSONペイロードを使用)を送信したいと思います。どうすればよいですか?可能であれば、これを行いますか?

13
aknuds1

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)
)
5
aknuds1

データベースにデータを入力するだけの場合は、別のライブラリを使用してPOSTリクエストを実行できます。

たとえば、次のようにbeforeEachsuperagent を使用できます。

var request = require( "superagent" );

describe( "Something", function() {

  beforeEach( function( done ) {
    request
      .post( "http://localhost/api/foo" )
      .send( {data : "something"} )
      .end( done );
  } );

} );
6
Der Hochstapler

分度器構成のonPrepare関数で非同期セットアップコードを実行することができます。リクエストが終了するのを待つように分度器に明示的に指示する必要があります。これは、promiseでNiceを再生するflow.await()を使用して実行できます。

onPrepare: function() {

  flow = protractor.promise.controlFlow()

  flow.await(setup_data({data: 'test'})).then( function(result) {
    console.log(result);
  })

}

**分度器1.1.0以降、prepareでpromiseを返すことができるため、flowを使用してpromiseの解決を明示的に待機する必要はありません。

参照: https://github.com/angular/protractor/blob/master/CHANGELOG.md

3
rjferguson21

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