2016-09-26 45 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,因为它比正常承诺执行得更好。 –