1

テストのために TAPE JS を使用するのは初めてです。私はそれをすべてセットアップして動作させており、通常のテストでは問題なく動作します。しかし、次の呼び出しが呼び出しを成功させるために必要な情報を取得する前に、特定の呼び出しが行われることに依存する独自の REST API ベースの製品をテストしようとしています。

だからここに私が働こうとしている最初の2つの呼び出しがあります:

var SessionId;

test('beginIqsSession', function (assert) {
    assert.plan(1);
    var requestData = {"ProductDataArray":{"Feid":"GIQNY","AltData":"SaneID:null","Debug":"false","PageId":"1.1"}};

    request({
    url: 'http://192.168.99.100/Iqs/api.php/beginIqsSession',
    method: "POST",
    json: requestData
    }, function(error, response, json){

        if(json.responseDataPayload.SessionId)
        {
            SessionId = json.responseDataPayload.SessionId;

            assert.equal(1,1);
        }
    });
    assert.end();
});


test('validateAddress', function (assert) {
    assert.plan(2);

    console.log("Retrieving validateAddress response");

    var requestData = {"SessionId":SessionId,"ValidateAddressDataArray":{"PropertyStreetNumber":"20671","PropertyStreetName":"mountain vista dr","PropertyCity":"anchorage","PropertyState":"AK","PropertyZipCode":"99577"}};

    console.log(SessionId);

    request({
        url: 'http://192.168.99.100/Iqs/api.php/validateAddress',
        method: "POST",
        json: requestData
    }, function (error, response, body) {

        if (!error) {
            console.log(body);
        }
        else {
            console.log("error: " + error)
        }
    });

    assert.end();
});

したがって、基本的に上記のコードでは、beginIqsSession をテストし、その応答を待ち、その応答から、将来の呼び出しで送信する必要があるデータの一部を保存しようとしています。

validateAddress では、前の呼び出しで返された SessionId を渡そうとしていることがわかりますが、このテストは前のテストと同時に実行されているため、この変数はまだ空です。前の呼び出しが実行されるのを待つために、2 番目の呼び出しとそれ以降のすべての呼び出しを行うにはどうすればよいですか?

assert.plan は明らかにこの方法では機能しません。

4

1 に答える 1

1

Promise APIを使用できます

var SessionId;

let p1 = new Promise((resolve, reject) => {
  test('beginIqsSession', function (assert) {
    assert.plan(1);
    var requestData = {"ProductDataArray":{"Feid":"GIQNY","AltData":"SaneID:null","Debug":"false","PageId":"1.1"}};

    request({
    url: 'http://192.168.99.100/Iqs/api.php/beginIqsSession',
    method: "POST",
    json: requestData
    }, function(error, response, json){

        if(json.responseDataPayload.SessionId)
        {
            SessionId = json.responseDataPayload.SessionId;

            assert.equal(1,1);
          resolve(SessionId);
        }
    });
    assert.end();
  });
})

p1.then((SessionId) => {
  test('validateAddress', function (assert) {
    assert.plan(2);

    console.log("Retrieving validateAddress response");

    var requestData = {"SessionId":SessionId,"ValidateAddressDataArray":{"PropertyStreetNumber":"20671","PropertyStreetName":"mountain vista dr","PropertyCity":"anchorage","PropertyState":"AK","PropertyZipCode":"99577"}};

    console.log(SessionId);

    request({
        url: 'http://192.168.99.100/Iqs/api.php/validateAddress',
        method: "POST",
        json: requestData
    }, function (error, response, body) {

        if (!error) {
            console.log(body);
        }
        else {
            console.log("error: " + error)
        }
    });

    assert.end();
  });
  
});

于 2016-09-26T19:36:42.170 に答える