Длина дублирующегося контента с Ax ios в NodeJS / JEST - PullRequest
1 голос
/ 12 апреля 2020

У меня действительно странная проблема с топором ios / nano express. Я начал писать JEST-тест и скопировал рабочий фрагмент кода из Vuex, который вызывает мой бэкэнд. Этот код надежно работает в Vue, но здесь он завершается с ошибкой сети. Версия Ax ios одинакова в тестах SPA и JEST.

JEST:

let response = await axios.get(`${API}/users/1234`, getAuthHeader()); 

function getAuthHeader() {
    const config = { headers: { } };
    config.headers.Authorization = "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxZTQwdjBiMWo1Iiwibmlja25hbWUiOiJsaXRlcmFrbCIsInB3ZFRpbWVzdGFtcCI6IjIwMjAtMDMtMjJUMTE6MTA6NDkuNDg2WiIsInJvbGVzIjpbImFkbWluOnBvbGwiXSwiaWF0IjoxNTg2NjkwNzc2LCJleHAiOjE1ODkzNjkxNzZ9.N5MfpZ9i9Sjv-izdYItR4gXCmzVkqkuVcVSEL_6Q89c";
    return config;
}

Когда я удаляю конфигурацию с заголовком авторизации, код работает хорошо:

let response = await axios.get(`${API}/users/1234`, getAuthHeader()); 

Это ошибка:

Network Error

  at createError (node_modules/axios/lib/core/createError.js:16:15)
  at XMLHttpRequest.handleError (node_modules/axios/lib/adapters/xhr.js:83:14)
  at XMLHttpRequest.<anonymous> (node_modules/jsdom/lib/jsdom/living/helpers/create-event-accessor.js:33:32)
  at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:316:27)
  at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:267:3)
  at XMLHttpRequestEventTargetImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:214:9)
  at fireAnEvent (node_modules/jsdom/lib/jsdom/living/helpers/events.js:17:36)
  at requestErrorSteps (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:121:3)
  at Object.dispatchError (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:51:3)
  at EventEmitter.<anonymous> (node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:675:20)
  at Request.<anonymous> (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:384:47)
  at Request.onRequestError (node_modules/request/request.js:877:8)

console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
Error: Error: Parse Error: Duplicate Content-Length
    at Object.dispatchError (C:\Users\leos\WebstormProjects\nano-options\node_modules\jsdom\lib\jsdom\living\xhr-utils.js:54:19)
    at EventEmitter.<anonymous> (C:\Users\leos\WebstormProjects\nano-options\node_modules\jsdom\lib\jsdom\living\xmlhttprequest.js:675:20)
    at EventEmitter.emit (events.js:327:22)
    at Request.<anonymous> (C:\Users\leos\WebstormProjects\nano-options\node_modules\jsdom\lib\jsdom\living\xhr-utils.js:384:47)
    at Request.emit (events.js:315:20)
    at Request.onRequestError (C:\Users\leos\WebstormProjects\nano-options\node_modules\request\request.js:877:8)
    at ClientRequest.emit (events.js:315:20)
    at Socket.socketOnData (_http_client.js:486:9)
    at Socket.emit (events.js:315:20)
    at addChunk (_stream_readable.js:297:12) undefined

Служба ничего особенного и никогда не вызывается при наличии заголовка авторизации и вызывается при отсутствии заголовка авторизации.

app.get('/v1/users/:userId', async (req, res) => {
    console.log("getUser handler starts");
    const response = {};
    res.send(response);
    return res;
});

Я провел несколько часов, пытаясь увидеть исходное сетевое соединение, но не смог. Это должно быть что-то с Ax ios, потому что я могу успешно выполнить точно такой же запрос с заголовком авторизации от Почтальона.

Обновление:

похоже, оно связано с NodeJS версией. Я отправил вопрос: https://github.com/axios/axios/issues/2889

Обновление 2:

Я переключился с Ax ios на Got и тест работает правильно. https://github.com/literakl/mezinamiridici/commit/e667c5661429fc8cba273716dfced2244e211abf

...