Nock не перехватывает звонок третьему лицу - PullRequest
0 голосов
/ 25 мая 2019

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

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

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 in 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.log(response.body);
                //test fails as third party server is not available and mock doesn't intercept
            })
            .end(done);
    });

1 Ответ

1 голос
/ 03 июня 2019

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

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

...