Axios: تقوم Jest و Nock بإرجاع خطأ في الشبكة عند تقديم طلبات باستخدام Axios

تم إنشاؤها على ٥ يونيو ٢٠١٧  ·  3تعليقات  ·  مصدر: axios/axios

ملخص

يؤدي اختبار التعليمات البرمجية غير المتزامنة باستخدام Jest أو Nock دائمًا إلى إرجاع خطأ في الشبكة.

تم الإبلاغ عن هذا من قبل الآخرين:
https://www.bountysource.com/issues/38003315-network-error-when-using-nock-with-axios
https://stackoverflow.com/questions/42677387/jest-returns-network-error-when-doing-an-authenticated-request-with-axios

لقد استخدمت في الواقع الحل الأول المقترح على StackOverflow: "تغيير الحل محول axios إلى http". هذا في الواقع يعمل.

بدون فرض محول http ، يؤدي تشغيل "اختبار npm" باستخدام Jest إلى عدم اكتمال الاختبار مطلقًا والبقاء عالقًا إلى الأبد.

لست متأكدًا من أن هذه مشكلة Axios وليست Jest أو Nock وهذه ليست النقطة المهمة.

الغريب هو تتبع المكدس أدناه: يبدو لي أنه يقوم بتشغيل تنفيذ xhr. أليس هذا غريباً في بيئة العقدة؟
هل هناك طريقة أبسط لفرض استخدام محول http عن تلك التي ينصح بها في StackOverflow؟

خطأ في الشبكة

 في createError (node_modules / axios / lib / core / createError.js: 16: 15)
 في XMLHttpRequest.handleError [كخطأ] (node_modules / axios / lib / adapters / xhr.js: 87: 14)
 في XMLHttpRequest.callback. (وظيفة مجهولة) (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 289: 32)
 في invokeEventListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 219: 27)
 في invokeInlineListeners (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 166: 7)
 في EventTargetImpl._dispatch (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 122: 7)
 في EventTargetImpl.dispatchEvent (node_modules / jsdom / lib / jsdom / living / events / EventTarget-impl.js: 87: 17)
 في XMLHttpRequest.dispatchEvent (node_modules / jsdom / lib / jsdom / living / created / EventTarget.js: 61:35)
 at dispatchError (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 994: 9)
 في validCORSHeaders (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 1009: 7)
 في ReceiverResponse (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 871: 12)
 في EventEmitter.client.on.res (node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 691: 38)
 في emitOne (events.js: 96: 13)
 في EventEmitter.emit (events.js: 191: 7)
 في Request.realClient.on.res (node_modules / jsdom / lib / jsdom / living / xhr-utils.js: 281: 49)
 في emitOne (events.js: 96: 13)
 في Request.emit (events.js: 191: 7)
 في Request.onRequestResponse (node_modules / request / request.js: 1074: 10)
 في emitOne (events.js: 101: 20)
 في ClientRequest.emit (events.js: 191: 7)
 في HTTPParser.parserOnIncomingClient (_http_client.js: 522: 21)
 في HTTPParser.parserOnHeadersComplete (_http_common.js: 99: 23)
 في Socket.socketOnData (_http_client.js: 411: 20)
 في emitOne (events.js: 96: 13)
 في Socket.emit (events.js: 191: 7)
 في readableAddChunk (_stream_readable.js: 178: 18)
 في Socket.Readable.push (_stream_readable.js: 136: 10)
 في TCP.onread (net.js: 561: 20)

سياق الكلام

  • إصدار أكسيوس :
  • البيئة: العقدة v7.10 ، Ubuntu 17.04 Linux 4.10

التعليق الأكثر فائدة

إذا ألقيت نظرة على تتبع المكدس الخاص بك ، ستلاحظ وجود آثار لـ jsdom. هذا يعني أنك تستخدم بيئة مستعرض / jsdom بدلاً من العقدة. إنها مجرد مشكلة في تكوين الدعابة.

ال 3 كومينتر

إذا ألقيت نظرة على تتبع المكدس الخاص بك ، ستلاحظ وجود آثار لـ jsdom. هذا يعني أنك تستخدم بيئة مستعرض / jsdom بدلاً من العقدة. إنها مجرد مشكلة في تكوين الدعابة.

لقد غيرت نص الاختبار في package.json إلى "test": "response-scripts test --env = node" لكنه لا يزال لا يعمل معي. هل هناك مكان آخر يحتاج فيه هذا إلى التغيير؟ (استخدم مشروعي تطبيق create-react-app)

jest --env=node يعمل لدي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات