我已经和它争斗了一段时间。我有一组mocha测试用例,我正在测试REST API。为此,我发送HTTP PUT请求并接收响应。
我正在使用Async库来控制逻辑流程,特别是此模型中的瀑布。
第一个PUT请求通过就好了,我从服务器得到了预期的响应。
如果我复制完全相同的代码,则第二个PUT请求超时。它到达http.req()行并且没有在那里打印console.log()消息,所以可能会以某种方式跳过请求,可能吗?
帮助弄清楚这是什么意思。
这是我的mocha测试用例中的相关代码段示例:
async.waterfall([
function someFunction(cb) {
var cmd = url.parse('http://<my_ip>:<my_port>/some/command');
cmd.headers = {};
cmd.headers['Content-Type'] = 'application/json';
cmd.method = 'PUT';
console.log('command:', cmd);
var req = http.request(cmd, function (res) {
console.log('sending some command at ' + cmd.href);
res.on('data', function (dataChunk) {
console.log('dataChunk:', dataChunk.toString());
});
res.on('end', function () {
// This logs, and completes correctly
console.log('done sending some command');
var statusCode = res.statusCode;
cb(null, statusCode);
});
res.on('error', function (e) {
console.error('Problem with response: ' + e.message);
cb(e, null);
});
});
req.on('error', function(e) {
console.error('problem with request: ' + e.message);
cb(e, null);
});
req.end();
},
function someFunctionDupe(statusCode, cb) {
var cmd = url.parse('http://<my_ip>:<my_port>/some/command');
cmd.headers = {};
cmd.headers['Content-Type'] = 'application/json';
cmd.method = 'PUT';
console.log('command:', cmd);
var req = http.request(cmd, function (res) {
// This line never executes:
console.log('sending some command at ' + cmd.href);
res.on('data', function (dataChunk) {
console.log('dataChunk:', dataChunk.toString());
});
res.on('end', function () {
console.log('done sending some command');
var statusCode = res.statusCode;
cb(null, statusCode);
});
res.on('error', function (e) {
console.error('Problem with response: ' + e.message);
cb(e, null);
});
});
req.on('error', function(e) {
console.error('problem with request: ' + e.message);
cb(e, null);
});
req.end();
},
// code continues