في الإصدار 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"
خيارًا لأن هذا سيؤدي فعليًا إلى فشل كل شيء آخر في الواجهة الأمامية.
كما هو مذكور في كل من 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 مع اختبارات الدعابة
التعليق الأكثر فائدة
لقد تمكنت من التعامل معها! بالنسبة لأولئك العالقين مثلي ، لا تقم بتعيين
pdfjs.GlobalWorkerOptions.workerSrc
أوpdfjs.GlobalWorkerOptions.workerPort
. بدلاً من ذلك ، استخدم ملف pdf.worker.entry.js - ما عليك سوى استيراده وتكون قد انتهيت!