【发布时间】:2016-09-27 03:36:42
【问题描述】:
我不熟悉使用 TAPE JS 进行测试。我已经完成了所有设置和工作,并且在常规测试中运行良好。但我正在尝试测试一个独特的基于 REST API 的产品,该产品依赖于在下一次调用获得成功调用所需的信息之前进行的某些调用。
所以这是我试图开始工作的前两个电话:
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,但由于此测试与上一次测试同时运行,因此此变量仍然为空。如何拨打第二个电话以及所有未来的电话以等待前一个电话运行?
assert.plan 显然不能以这种方式工作。
【问题讨论】:
-
您应该将第一个测试的
assert.end()放在请求回调中。其次,您不应该进行依赖于先前测试结果的测试。只需进行一次测试即可。 -
啊,是的,这是有道理的——这样工作得很好。是的,完全意识到每个测试应该只做一件事,但是我们有一个相当大的 API 来测试,但我们牢记这一点。
标签: javascript node.js node-modules node.js-tape