Поймать тайм-ауты мокко
Я пишу веб-сервис node.js, который должен общаться с другим сервером. Таким образом, это в основном связь между серверами. У меня нет предыдущего опыта написания веб-сервисов, поэтому у меня очень ограниченные знания. Для юнит-тестов я использую Мокко.
Теперь я намереваюсь протестировать поведение моей службы для определенного сценария, когда этот другой сервер не отвечает на мой запрос GET, и запрос фактически истек. Для тестов я создал фальшивый клиент и сервер вокруг моего веб-сервиса. Мой веб-сервис теперь принимает запрос от этого поддельного клиента, а затем получает информацию с другого созданного мной поддельного сервера, который затем возвращает ответ в ожидаемом формате. Для имитации тайм-аута я не делаю response.end() из моего обработчика маршрута. Проблема в том, что Мокко считает, что это испытание не прошло.
Есть ли способ, которым я мог бы поймать этот преднамеренный тайм-аут в Мокко, и тест прошел успешно?
1 ответ
Как предложил mido22, вы должны использовать handle timeout, генерируемый любой библиотекой, которую вы используете для подключения. Например, с request
:
var request = require("request");
it("test", function (done) {
request("http://www.google.com:81", {
timeout: 1000
}, function (error, response, body) {
if (error && error.code === 'ETIMEDOUT') {
done(); // Got a timetout: that's what we wanted.
return;
}
// Got another error or no error at all: that's bad!
done(error || new Error("did not get a timeout"));
});
});