Pada PDF.js 2.0.385 dan yang lebih baru, jalankan contoh paling sederhana berikut:
pdf.getDocument({ data: arrayBufferData })
.then(() => console.log('Success'))
.catch() => console.log('Fail'));
berjalan dengan baik di Node.js, tentu saja.
Menjalankan bagian yang sama di Jest, seperti dalam contoh ini (disederhanakan, harap abaikan fakta bahwa pengujian harus asinkron):
describe('Test', () => {
it('does something', () => {
pdf.getDocument({ data: arrayBufferData })
.then(() => console.log('Success'))
.catch() => console.log('Fail'));
});
}
testEnvironment
disetel ke "node"
, berhasil.testEnvironment
disetel ke "jsdom"
(default), hang dan tidak pernah mencapai .then()
.Pada PDF.js 2.0.305 dan sebelumnya hal ini tidak menjadi masalah, karena Anda dapat dengan mudah menonaktifkan pekerja secara manual.
Sekarang tidak ada cara untuk melakukannya melalui konfigurasi pada #9385, semua proyek yang menggunakan PDF.js dan Jest/JSDom tidak akan dapat menguji apa pun yang terkait dengan PDF.js . Mengalihkan testEnvironment
ke "node"
biasanya bukan pilihan karena ini akan menyebabkan hampir semua hal lain di front-end gagal.
Seperti yang disebutkan dalam ISSUE_TEMPLATE.md dan CONTRIBUTING.md :
Untuk masalah dengan penerapan kustom, Anda perlu memberikan akses ke contoh yang lengkap, dan kecil, yang dapat dijalankan agar masalah dapat ditindaklanjuti. Dan tolong jangan berasumsi bahwa orang akrab dengan berbagai kerangka kerja JS, dalam hal ini "Jest".
Tanpa konteks atau kode apa pun, pertanyaan berikut muncul di benak:
Apakah pekerja didukung, dan jika demikian, apakah Anda sudah mencoba menyetel opsi workerSrc
dan menjalankan pengujian dengan pekerja diaktifkan?
Sudahkah Anda mencoba menggunakan opsi workerPort
untuk memuat file pekerja? Ingatlah bahwa itu juga memungkinkan untuk meneruskan pekerja ke getDocument
, lihat https://github.com/mozilla/pdf.js/blob/0d391daccc2f4e4b9c91268e719bd10fe63a49ae/src/display/api.js#L129 -L130
Saya telah berhasil menghadapinya! Bagi mereka yang terjebak seperti saya, JANGAN setel pdfjs.GlobalWorkerOptions.workerSrc
atau pdfjs.GlobalWorkerOptions.workerPort
. Sebagai gantinya, gunakan file pdf.worker.entry.js - cukup impor dan selesai!
Solusi di atas tidak berfungsi untuk saya, sebaliknya saya harus mengonfigurasi lelucon untuk menggunakan node alih-alih jsdom (diaktifkan secara default)
Menambahkan ini ke bagian atas file spesifikasi saya menyelesaikannya
/**
* @jest-environment node
*/
Bagi saya tidak ada solusi di atas yang berfungsi. Saya menggunakan vue-cli dengan tes lelucon
Komentar yang paling membantu
Saya telah berhasil menghadapinya! Bagi mereka yang terjebak seperti saya, JANGAN setel
pdfjs.GlobalWorkerOptions.workerSrc
ataupdfjs.GlobalWorkerOptions.workerPort
. Sebagai gantinya, gunakan file pdf.worker.entry.js - cukup impor dan selesai!