يؤدي اختبار التعليمات البرمجية غير المتزامنة باستخدام 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)
إذا ألقيت نظرة على تتبع المكدس الخاص بك ، ستلاحظ وجود آثار لـ jsdom. هذا يعني أنك تستخدم بيئة مستعرض / jsdom بدلاً من العقدة. إنها مجرد مشكلة في تكوين الدعابة.
لقد غيرت نص الاختبار في package.json إلى "test": "response-scripts test --env = node" لكنه لا يزال لا يعمل معي. هل هناك مكان آخر يحتاج فيه هذا إلى التغيير؟ (استخدم مشروعي تطبيق create-react-app)
jest --env=node
يعمل لدي.
التعليق الأكثر فائدة
إذا ألقيت نظرة على تتبع المكدس الخاص بك ، ستلاحظ وجود آثار لـ jsdom. هذا يعني أنك تستخدم بيئة مستعرض / jsdom بدلاً من العقدة. إنها مجرد مشكلة في تكوين الدعابة.