Nock не перехватывает вызов третьей стороне

Я пытаюсь автоматизировать некоторые службы REST с помощью SuperTest. Служба представляет собой вызов POST, который внутренне вызывает метод GET другой сторонней службы. Я пытаюсь издеваться над сторонними сервисами, чтобы повысить эффективность тестирования и сократить время его выполнения. Я использую нок, чтобы имитировать вызов сторонней службы.

Мой первоначальный звонок в службу поддержки выглядит так:

curl -X POST \
  http://internal-url.com/path \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -d '{
    "key1": "value1",
    "key2": "value2"
}'

Эта служба делает вызов сторонней службе, которая выглядит так:

curl -X GET \
  'http://3rdparty-url.com/value1' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -H 'key2: value2'

Я издевался над сервисом, используя nock в beforeTest, например:

nock('http://3rdparty-url.com')
    .get('/value1')
    .reply(200, 'domain matched');

Когда я звоню напрямую в эту стороннюю службу с помощью SuperTest, она возвращает имитированный ответ. Однако моя цель - сделать вызов POST и перехватить вызов сторонней службы с помощью заглушки, чего не происходит. Я добился подобного в мире Java, используя WireMock. Можно ли это сделать с помощью nock?

Мой тест выглядит так -

var payload = {"key1": "value1", "key2": "value2"};
describe('Test third party Service', function () {
    it('should return success on POST /path service', function (done) {
        supertest('http://internal-url.com')
            .post('/path')
            .send(payload)
            .expect(200)
            .expect('Content-type', /application/json/)
            .expect(function (response) {
                console.info(response.body);
                //test fails as third party server is not available and mock doesn't intercept
            })
            .end(done);
    });

Можно с nock и ваш пример правильный. Должно быть что-то еще неправильно настроено в ваших тестах. Может быть полезно включить код с помощью супертеста для вызова локального приложения.

Matt R. Wilson 27.05.2019 15:35

@MattR.Wilson - обновил тест

Abhi Nandan 31.05.2019 16:27

Какие шаги вы предприняли, чтобы убедиться, что запрос, отправляемый из вашего внутреннего приложения, идентичен запросу curl GET, который вы разместили выше? Кроме того, работает ли внутреннее приложение в том же процессе Node, что и тест?

Matt R. Wilson 01.06.2019 04:10

@MattR.Wilson - я проверил журнал приложений, который показывает точный CURL, который я использую. Во-вторых, приложение и тесты выполняются в разных процессах Node. Может ли это быть проблемой?

Abhi Nandan 02.06.2019 07:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
1 113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нок работает с помощью функций обезьяньего исправления из модулей Node http и https в памяти текущего процесса. Это означает, что вызовы Nock должны выполняться в том же процессе, что и тот, который делает запросы.

В вашем случае все, что запускает приложение для «internal-url.com», должно вызывать nock. Обычное соглашение с nock и supertest заключается в том, чтобы запускать экземпляр вашего внутреннего приложения в том же процессе, что и тесты. Примеры супертестов показывает, как это сделать с помощью такой среды, как Express.

Я думаю, что лучше дать некоторый контекст того, что вы имеете в виду, а не просто ссылки на URL. Что произойдет, если этот URL-адрес не работает или перестает существовать???‍♂️

Fortune 29.10.2021 11:36

Весь первый абзац представляет собой контекст, который отвечает на конкретный вопрос о Nock. Второй абзац должен был помочь направить OP в правильном направлении для их варианта использования, которым оказался Supertest. Поскольку этот вопрос не касался Супертеста, я намеренно не копировал/вставлял код из его файла readme, так как он не по теме.

Matt R. Wilson 29.10.2021 17:57

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