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 мс (успешный запрос)