2016-09-26 41 views
1

我是新來的與TAPE JS工作測試。我已經完成了所有設置和工作,並且它可以在常規測試中正常工作。但是我試圖測試一個獨特的基於REST API的產品,它依靠在下一次調用之前已經完成的某些調用而獲得了成功調用所需的信息。JS磁帶 - 等待以前的異步測試完成移動到下一個測試

因此,這裏是前兩個電話,我試圖讓工作:

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,等待它的響應,並存儲一個數據從未來電話需要發送的響應。

in validateAddress您會看到我正在嘗試傳遞其中前一個調用返回的SessionId,但因爲此測試正在同時運行以前的測試中,這個變量仍然是空的。如何讓第二個電話和所有將來的電話等待上一個電話的運行?

assert.plan顯然不能以這種方式工作。

+2

你應該把'assert.end()'請求回調中的第一個考驗。其次,你不應該有依賴於先前測試結果的測試。只是做一個測試。 – idbehold

+0

啊,是的,這是有道理的 - 作品很好。是的,完全知道每個測試都應該自己做一件事,但我們有一個相當大的API來測試,但我們有這個想法。 –

回答

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

+0

嘗試http://bluebirdjs.com/docs/getting-started.html,因爲它比正常承諾執行得更好。 –