супертест макет с режимом записи nock.back не работает - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть служба nodejs, которая при вызове своей конечной точки выполняет http-вызов для службы B. Я добавляю в свой сервис приемочный тест для проверки интеграции.

Использование nock.back in *Режим 1004 * работает отлично, но когда я устанавливаю режим на record, тест не работает во второй раз, когда я его запускаю, хотя прибор генерируется правильно.

Мне нужно запустить тесты в record режим, потому что в некоторых средах, где будет выполняться тест, служба B. будет недоступна.

Вот мой тест:

nock.back.setMode('record');
nock.back.fixtures = path.join(__dirname, '..', 'fixtures');

it('validates the contract for at least one hotel', (done) => {
  return nock
    .back('myfixture.json', defaultOptions)
    .then(({ nockDone }) =>
      request(app)
        .get('/myapi/route')
        .then((res) => {
          expect(res.status).toBe(200);
          console.log(res.body);
          done();
        })
        .then(nockDone),
    )
    .then();
});

При запуске без генерируемого myfixture.jsonдо этого тест проходит, и прибор генерируется правильно.В следующий раз, когда я запускаю тест (с прибором там), тест завершается неудачно с:

NetConnectNotAllowedError: Nock: Not allow net connect for "127.0.0.1:52027/myapi/route

С другой стороны, если вместо режима record я устанавливаю режим dryrun, тестпроходит всегда, и тело ответа является правильным, поэтому вызовы службы B выполняются правильно.

1 Ответ

0 голосов
/ 04 октября 2018

Проблема здесь в том, что во второй раз, когда тест выполняется с уже созданными приборами, все запросы http, которые не появляются в файлах осветителей, отклоняются.

Это отклонение также включает в себя фактическое внутреннеезапросы, которые supertest делает с приложением, поэтому для его разрешения должен быть разрешен localhost, например:

nock.enableNetConnect(/(localhost|127\.0\.0\.1)/);
...