Nock не перехватывает http запросы - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время я использую node-fetch и nock для экспресс-сервера, расположенного поверх углового проекта.

У меня есть следующее промежуточное программное обеспечение, которое выполняет вызов API:

export const middleware = async(response: any) => {
    try {
        const result = await fetch(url).then(res => res.json())
        return response.status(200).json(result);
    } catch(err) {
        logger.error({eventId: 'get-content', err});
        return response.status(500)
    }
}

и мой тест выглядит следующим образом:

describe('API service', () => {
    let response, scope;
    beforeEach(() => {
        response = {
            status(s) { this.statusCode = s; return this; },
            json(result) { this.res = result; return this; },
        };
    })

    afterEach(() => {
        nock.restore();
    })

    it('should return a 200 response from successful call api', (done) => {
        scope = nock(url)
            .get(/.*/)
            .reply(200, {data: 'content'})

        middleware(response).then(data => {
            expect(response.status).toEqual(200);
            expect(response.data).toEqual('content');
            scope.isDone();
            done();
        })
    })
})

Однако nock не высмеивает ответ data от функции промежуточного программного обеспечения.Вместо этого я должен был бы использовать scope для доступа к его параметрам.

Функция промежуточного программного обеспечения действует так, как будто nock никогда не высмеивал свой ответ.Почему это происходит? Я пропустил конфигурацию?

Я выполняю свои тесты, используя бегун кармы.

1 Ответ

0 голосов
/ 27 мая 2019

Nock работает, переопределяя функцию http.request узла.Кроме того, он переопределяет http.ClientRequest, чтобы охватить модули, которые его используют напрямую.

К сожалению, похоже, fetch не делаетиспользование http.request или http.ClientRequest означает, что запросы никогда не перехватываются nock.

Лучшим подходом может быть макетирование fetch с такой библиотекой, как fetch-mock.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...