Поймать тайм-ауты мокко

Я пишу веб-сервис 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"));
    });
});
Другие вопросы по тегам