Заголовки Nock — Ошибка: Nock: нет соответствия запросу

#node.js #testing #jestjs #nock

#node.js #тестирование #jestjs #nock

Вопрос:

Вот мой пример кода по какой-то причине Nock не работает для меня, поскольку он не может соответствовать URL-адресу при добавлении заголовков, при комментировании кода, как показано ниже, при прохождении теста. Я не могу понять, почему nock не понимает заголовки, как сказано в документе, чтобы сделать это, что я и сделал: reqheaders: { ‘authorization’: ‘Basic Auth’ }

Надеясь, что кто-нибудь сможет уловить что-то странное, что я делаю.

 const axios = require('axios');

async function postAPI(params) {
    let response1 = '';
    try {
        response1 =  await axios.post('http://someurl/test2', params);
        
    } catch(error) {
        throw error;
    }

    try {
        console.log("Im here", response1.data.sample)
    const response = await axios.get('http://testurl/testing', {
        // headers: {
        //   'authorization' : 'Basic Auth' //  response1.data.sample 
        // }
       });
       return response.data;
    
    } catch(err) {
            console.log("Error", err)
    }
}

exports.postAPI = postAPI;
  

Тест

 it('make an api call - POST', async () => {

      nock('http://someurl')
      .persist()
      .defaultReplyHeaders({
        'access-control-allow-origin': '*',
        'access-control-allow-credentials': 'true' 
      })
        .post('/test2')
        .reply(200, {
                sample : 'test2'     
  });

    const test = nock('http://testurl', {
    //  reqheaders: {
    //    'authorization' : 'Basic Auth'
    //  }
    })
    .defaultReplyHeaders({
      'access-control-allow-origin': '*',
      'access-control-allow-credentials': 'true'
    })
      .get('/testing')
      .reply(200, { data : 'test' });

      const response = await postAPI();
      console.log("XXXX", response)
      expect(response.data).toEqual("test");
    });
  

Комментарии:

1. Вы пробовали включить debug, чтобы узнать, почему Nock не соответствует вашему запросу? github.com/nock/nock#debugging

2. Возникли трудности с этим в рабочем коде, по какой-то причине он не попадает по URL-адресу и получает ответ undefined. Где, как дома, что-то получалось, кроме проблем с заголовком auth. Вместо этого попробую макет axios и посмотрю, работает ли это лучше для меня. В любом случае спасибо.

Ответ №1:

Ваши reqheaders должны соответствовать тому, что вы передаете в заголовках запросов axios.

 reqheaders: {
    'authorization' : 'Basic Auth test2'
}
  

когда вы объединяете заголовок авторизации в основной функции, не забудьте добавить пробел между Auth и response1.data.sample 🙂

 'authorization' : 'Basic Auth '   response1.data.sample
  

Я попробовал ваш код, и он работает.
Полный тест:

 const nock = require('nock');
const { postAPI } = require('./index');
const { expect } = require('chai');

describe('postapi', () => {
    it('make an api call - POST', async () => {

        nock('http://someurl')
        .defaultReplyHeaders({
          'access-control-allow-origin': '*',
          'access-control-allow-credentials': 'true' 
        })
          .post('/test2')
          .reply(200, {
                  sample : 'test2'     
        });
    
        nock('http://testurl', {
            reqheaders: {
            'authorization' : 'Basic Auth test2'
            }
        })
        .defaultReplyHeaders({
            'access-control-allow-origin': '*',
            'access-control-allow-credentials': 'true'
        })
        .get('/testing')
        .reply(200, { data : 'test' });
    
        const response = await postAPI();
        console.log("XXXX", response)
        expect(response.data).to.be.eql("test");
      });
});
  

Комментарии:

1. Спасибо, не заметил этого пробела 😀 использовал nock для некоторых других вещей, но полезно знать, где я ошибался.