Pdf.js: توقف getDocument في بيئة Jest / JSDom

تم إنشاؤها على ١٨ مارس ٢٠١٨  ·  4تعليقات  ·  مصدر: mozilla/pdf.js

في الإصدار 2.0.385 من PDF.js والإصدارات الأحدث ، قم بتشغيل المثال الأبسط التالي:

pdf.getDocument({ data: arrayBufferData })
  .then(() => console.log('Success'))
  .catch() => console.log('Fail'));

يعمل بشكل جيد على Node.js ، من الواضح.

تشغيل نفس القطعة في Jest ، كما في هذا المثال (مبسط ، يرجى تجاهل حقيقة أن الاختبارات يجب أن تكون غير متزامنة):

describe('Test', () => {
  it('does something', () => {
    pdf.getDocument({ data: arrayBufferData })
      .then(() => console.log('Success'))
      .catch() => console.log('Fail'));
  });
}
  • إذا تم تعيين testEnvironment على "node" ، ينجح.
  • إذا تم تعيين testEnvironment على "jsdom" (افتراضي) ، يتوقف ولن يصل أبدًا إلى .then() .

في الإصدار 2.0.305 من PDF.js والإصدارات الأقدم ، هذه ليست مشكلة ، لأنه يمكنك بسهولة تعطيل العمال يدويًا.

الآن بما أنه لا توجد طريقة للقيام بذلك عبر التكوين اعتبارًا من # 9385 ، فلن تتمكن جميع المشروعات التي تستخدم PDF.js و Jest / JSDom من اختبار أي شيء متعلق بـ PDF.js. عادةً ما لا يكون تبديل testEnvironment إلى "node" خيارًا لأن هذا سيؤدي فعليًا إلى فشل كل شيء آخر في الواجهة الأمامية.

1-core

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

لقد تمكنت من التعامل معها! بالنسبة لأولئك العالقين مثلي ، لا تقم بتعيين pdfjs.GlobalWorkerOptions.workerSrc أو pdfjs.GlobalWorkerOptions.workerPort . بدلاً من ذلك ، استخدم ملف pdf.worker.entry.js - ما عليك سوى استيراده وتكون قد انتهيت!

ال 4 كومينتر

كما هو مذكور في كل من ISSUE_TEMPLATE.md و CONTRIBUTING.md :
بالنسبة للمشكلات المتعلقة بالتطبيقات المخصصة ، تحتاج إلى توفير الوصول إلى مثال كامل وصغير وقابل للتشغيل حتى تكون المشكلة قابلة للتنفيذ. ويرجى عدم افتراض أن الناس على دراية بأطر عمل JS المختلفة ، في هذه الحالة "Jest".

بدون أي سياق أو رمز ، تتبادر الأسئلة التالية إلى الذهن:
هل يتم دعم العمال ، وإذا كان الأمر كذلك ، فهل حاولت تعيين الخيار workerSrc وتشغيل الاختبارات فقط مع تمكين العمال؟
هل حاولت استخدام الخيار workerPort لتحميل ملف العامل؟ ضع في اعتبارك أنه من الممكن أيضًا تمرير عامل إلى getDocument ، راجع https://github.com/mozilla/pdf.js/blob/0d391daccc2f4e4b9c91268e719bd10fe63a49ae/src/display/api.js#L129 -L130

لقد تمكنت من التعامل معها! بالنسبة لأولئك العالقين مثلي ، لا تقم بتعيين pdfjs.GlobalWorkerOptions.workerSrc أو pdfjs.GlobalWorkerOptions.workerPort . بدلاً من ذلك ، استخدم ملف pdf.worker.entry.js - ما عليك سوى استيراده وتكون قد انتهيت!

لم يعمل الحل أعلاه بالنسبة لي ، وبدلاً من ذلك اضطررت إلى تكوين jest لاستخدام العقدة بدلاً من jsdom (تم تمكينه افتراضيًا)

أدت إضافة هذا إلى الجزء العلوي من ملف المواصفات الخاص بي إلى حلها

/**
 * @jest-environment node
 */

بالنسبة لي لا يعمل أي من الحلول المذكورة أعلاه. أنا أستخدم vue-cli مع اختبارات الدعابة

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

القضايا ذات الصلة

hp011235 picture hp011235  ·  4تعليقات

AlexP3 picture AlexP3  ·  3تعليقات

anggikolo11 picture anggikolo11  ·  3تعليقات

timvandermeij picture timvandermeij  ·  4تعليقات

aaronshaf picture aaronshaf  ·  3تعليقات