Node.js Nock имитирует время ожидания запроса и последующий успех

Я пытаюсь смоделировать тайм-ауты запросов на обслуживание, чтобы протестировать модуль запроса узла, который позволяет указать максимальное количество попыток и задержку повторных попыток. Чтобы проверить это, мне нужно использовать nock для имитации времени ожидания для первого числа запросов X, а затем успешно ответить на тот же запрос. Я знаю, что есть метод socketDelay() для задержки соединения, но как мне указать успешный ответ после этого первого отложенного ответа?

У меня есть это, которое имитирует тайм-аут по первому запросу

//delays the first request's response by 1500
nock(urlHost)
     .post('/' + uriPath)
     .socketDelay(1500)
     .reply(200, 'response body');

но как я могу заставить его быстрее реагировать на симуляцию восстановления сервиса? Я ищу что-то подобное

//delays the first two request's responses by 1500
nock(urlHost)
    .post('/' + requestIdentifier.ttoRoutingInfo.uriPath)
    .socketDelay(1500)
    .reply(200, 'response body')
    .times(2)
  //delays the third request by only 300
    .then
    .socketDelay(300)
    .reply(200, 'response body');

1 ответ

Решение

Я отвечу на свой вопрос, так как я понял это. Оказывается, что nock позволяет создавать очереди для одной и той же конечной точки, хотя это не упоминается в документации. Это то, что я использовал для имитации различного времени задержки в запросах. Обратите внимание на разные значения для каждого тела ответа

 var nockScope = nock(urlHost)
        .post('/' + uriPath)
        .delayConnection(400)
        .reply(200, 'response body1')
        .post('/' + uriPath)
        .delayConnection(400)
        .reply(200, 'response body2')
        .post('/' + uriPath)
        .delayConnection(200)
        .reply(200, 'response body3');


 expect(data).to.equal('response body3');

После использования requestretry Для модуля с тайм-аутом =300, retryDelay=500 и maxAttempts=2 ответом должно быть тело третьего запроса с момента первых двух тайм-аутов. обратите внимание, что я использовал разные значения для каждого тела ответа, чтобы убедиться, что у меня фактически истекло время ожидания первых двух. Вы можете убедиться, что первые два запроса не были выполнены, потому что тестирование заняло 1800 мс. 300 мс (первый тайм-аут) + 500 мс (задержка) + 300 мс (второй тайм-аут) + 500 мс (задержка) + 200 мс (успешный запрос)

Другие вопросы по тегам