2016-03-11 8 views
0

Я использую mocha для проверки API Node.js, который я пишу. Мне нужно mocha для отправки, например, 100 HTTP-запросов одновременно, а затем 100 обратных вызовов, ожидающих ответных данных. И после того, как все 100 вызовов будут выполнены, мне нужно запустить еще одну серию из 100 HTTP-запросов.Mocha async запрашивает API Node.js

Что я знаю о 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). Кто-нибудь знает, что делать здесь?

ответ

0

Возможно, я ошибаюсь, но я не вижу смысла использовать async.map в вашем коде.

Учитывая 100 запросов отправить их все в одном тесте

В случае, если ваш тест является «Отправить 100 запросов и тестирование, что они все возвращаются», вы должны использовать async в тесте.

it("Run first 100 HTTP requests...", function (done) { 

    function sendRequest(call, next){ 
    request({ 
     method: 'POST', 
     uri: 'http://127.0.0.1:3000/register', 
     json: { 
      data: { 
      name: call.name, 
      id: call.id 
      } 
     }, 
     }, 
     function (err, res) { 
     if(err){ 
      next(err); 
     } else { 
      expect(res.body).to.exist; 
      // ... more assertions here 
      next(); 
     } 
     }); 
    } 

    async.series(calls, sendRequest, done); 

}); 
... more tests here 

Учитывая список 100 вызовов испытает каждый единственный вызов

Если то, что вы хотите сделать, это есть список звонков и есть тест it для каждого из них, то вы можете просто произвести новый it clojure для каждого звонка. mocha зарегистрирует тесты it, а затем выполнит их.

var registeredData = {}; 
describe("Run first 100 HTTP requests...", function() { 

    function createCallTest(call){ 
    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(); 
     }); 
    }); 
    } 

    // generate one test for each calls entry 
    calls.forEach(function(call){ 

    createCallTest(call); 

    }); 
}); 
... more tests here 
+0

Да, вы правы, я достал async.map. Но эти запросы отправляются один за другим. У меня есть два терминала вверх, один для API, а другой для мокко-тестов, отправляющих запросы, и API не получает все вызовы асинхронно. запрос блокирует каждый последующий вызов до тех пор, пока не будет возвращено предыдущее значение. – Jeremy

+0

Если вы хотите одновременные вызовы, я бы рекомендовал их группировать: даже если вы запускаете их вместе, обычно существует максимальное количество вызовов, которые могут быть открыты параллельно. Я считаю, что 100 намного выше этой шапки. – MarcoL

+0

ну, я не могу даже получить 2 одновременных звонка с этим, хотя – Jeremy

 Смежные вопросы

  • Нет связанных вопросов^_^