Как правильно использовать Nock JS для фиксации HTTP-запросов? - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь записать некоторые HTTP-вызовы Stripe, происходящие на фоне выполнения библиотеки узлов Stripe.

Я болел за функцию возврата Нока , однако у меня не получаются лучшие результаты при попытке выполнить его в режиме 'record'.

Что происходит:

  • Файл фикстуры создается, если он запускается первым в режиме записи. Это включает 3 запроса:
    • Соответствует вызову Stripe API, который библиотека инициирует для создания клиента.
    • Второй - вызов Stripe API для подписки.
    • Третий удар по нашей конечной точке API, который фактически приводит к выполнению предыдущих вызовов.
  • При втором и последующем выполнении тестов ответ на мою конечную точку заканчивается нулевым ответом.

Это фрагмент кода, относящийся к использованию nock:

nockBack.fixtures = path.join(__dirname, 'fixtures')
nockBack.setMode('record')

describe.only('Subscriptions creation', function () {
  this.timeout(20000)

  before(function (done) {
    let {user, jwt} = getRandomUserAndJwt()
    testToken = jwt
    return setupTestDatabaseWithUser(user, async function (err, createdUser) {
      if (err) return done(err)
      testUser = createdUser
      const { nockDone } = await nockBack('subscription.json')
      chai.request(server)
      .post(API_BASE)
      .set('Authorization', `Bearer ${testToken}`)
      .send(testRequestPayload)
      .end(function (err, response) {
        const {status, body: subscription} = response
        status.should.equal(201)
        should.exist(subscription)
        const nyaFields = ['id', 'status', 'planId', 'stripe_status', 'dateSubscriptionWillRenew']
        nyaFields.forEach(f => subscription.should.haveOwnProperty)
        testSubscription = subscription
        nockDone()
        nockBack.setMode('wild')
        done(err)
      })
    })
  })

Итак

    const { nockDone } = await nockBack('subscription.json')

вызывает создание файла. Повторяю, это массив с 3 запросами.

Если я выполню снова,

    .end(function (err, response) {

err будет определено и сообщит:

{ NetConnectNotAllowedError: Nock: Not allow net connect for "127.0.0.1:63304/api/subscriptions" (...)
  name: 'NetConnectNotAllowedError',
  code: 'ENETUNREACH',
  message: 'Nock: Not allow net connect for "127.0.0.1:63304/api/subscriptions"',
  response: undefined }

Итак, я попытался добавить

  nock.disableNetConnect()
  nock.enableNetConnect(/127\.0\.0\.1/)

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

    nockDone()
    nockBack.setMode('wild')
    nock.cleanAll()
    nock.enableNetConnect()

Но все еще возникают те же проблемы

...