Я использую mocha для тестирования API Node.js, который я пишу. Мне нужно, чтобы mocha отправил, например, 100 HTTP-запросов одновременно, а затем получил 100 обратных вызовов, ожидающих данных ответа. И затем, после того как все 100 из этих вызовов будут выполнены, мне нужно выполнить еще одну серию из 100 HTTP-запросов.
Что я знаю о Mocha: каждый вызов бок о бок описания функции выполняется синхронно. В одном описании я запускаю 100 HTTP-запросов, используя async
(это то, что мне советовали делать в большинстве ответов Stackoverflow.
Сейчас у меня проблемы с запуском этих HTTP-запросов в асинхронном режиме. Каждый it
должен быть асинхронным, но это определенно не тот случай, когда ожидание данных запроса
var registeredData = {};
describe("Run first 100 HTTP requests...", function () {
async.map(calls, function (call, callback) {
it('call '+call.num, function(done) {
request({
method: 'POST',
uri: 'http://127.0.0.1:3000/register',
json: {
data: {
name: call.name,
id: call.id
}
},
},
function (err, res) {
expect(res.body).to.exist;
registeredData[call.num] = res.body.info;
done();
});
});
callback();
});
});
describe("Run next 100 HTTP requests...", function () {
async.map(calls, function (call, callback) {
it('call '+call.num, function(done) {
request({
method: 'POST',
uri: 'http://127.0.0.1:3000/getData',
json: {
data: {
dataFor: registeredData[call.num]
}
},
},
function (err, res) {
expect(res.body).to.exist;
done();
});
});
callback();
});
});
По сути, первые 100 HTTP-запросов регистрируют учетные записи, а следующие 100 извлекают информацию для каждой соответствующей учетной записи. Я не знаю, когда звонить done()
и когда звонить callback()
(относительно async.map
). Кто-нибудь знает, что здесь делать?