Pdf.js: getDocument hängt in der Jest/JSDom-Umgebung

Erstellt am 18. März 2018  ·  4Kommentare  ·  Quelle: mozilla/pdf.js

Führen Sie auf PDF.js 2.0.385 und höher das folgende einfachste Beispiel aus:

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

läuft offensichtlich gut auf Node.js.

Ausführen des gleichen Stücks in Jest, wie in diesem Beispiel (vereinfacht, bitte ignorieren Sie die Tatsache, dass die Tests asynchron sein sollten):

describe('Test', () => {
  it('does something', () => {
    pdf.getDocument({ data: arrayBufferData })
      .then(() => console.log('Success'))
      .catch() => console.log('Fail'));
  });
}
  • wenn testEnvironment auf "node" gesetzt ist, erfolgreich.
  • wenn testEnvironment auf "jsdom" (Standard) gesetzt ist, hängt und erreicht nie .then() .

Bei PDF.js 2.0.305 und früheren Versionen ist dies kein Problem, da Sie Arbeiter einfach manuell deaktivieren können.

Da es ab #9385 keine Möglichkeit mehr gibt, dies über die Konfiguration zu tun, können alle Projekte, die PDF.js und Jest/JSDom verwenden, nichts mit PDF.js-bezogenem Testen . Der Wechsel testEnvironment zu "node" ist normalerweise keine Option, da dies dazu führt, dass praktisch alles andere im Front-End fehlschlägt.

1-core

Hilfreichster Kommentar

Ich habe es geschafft, damit umzugehen! Für diejenigen, die wie ich feststecken, setzen Sie NICHT pdfjs.GlobalWorkerOptions.workerSrc oder pdfjs.GlobalWorkerOptions.workerPort . Verwenden Sie stattdessen die Datei pdf.worker.entry.js - einfach importieren und fertig!

Alle 4 Kommentare

Wie in ISSUE_TEMPLATE.md und CONTRIBUTING.md erwähnt:
Bei Problemen mit benutzerdefinierten Implementierungen müssen Sie Zugriff auf ein vollständiges und kleines, ausführbares Beispiel bereitstellen, damit das Problem behoben werden kann. Und gehen Sie bitte nicht davon aus, dass die Leute mit verschiedenen JS-Frameworks vertraut sind, in diesem Fall "Jest".

Ohne Kontext oder Code kommen mir die folgenden Fragen in den Sinn:
Werden Worker unterstützt, und wenn ja, haben Sie versucht, die Option workerSrc festzulegen und nur Tests mit aktivierten Workern auszuführen?
Haben Sie versucht, die Worker-Datei mit der Option workerPort zu laden? Denken Sie daran, dass es auch möglich ist, einen Worker an getDocument zu übergeben, siehe https://github.com/mozilla/pdf.js/blob/0d391daccc2f4e4b9c91268e719bd10fe63a49ae/src/display/api.js#L129 -L130

Ich habe es geschafft, damit umzugehen! Für diejenigen, die wie ich feststecken, setzen Sie NICHT pdfjs.GlobalWorkerOptions.workerSrc oder pdfjs.GlobalWorkerOptions.workerPort . Verwenden Sie stattdessen die Datei pdf.worker.entry.js - einfach importieren und fertig!

Die obige Lösung hat bei mir nicht funktioniert, stattdessen musste ich jest konfigurieren, um node anstelle von jsdom zu verwenden (standardmäßig aktiviert).

Das Hinzufügen dieser zum Anfang meiner Spezifikationsdatei löste es

/**
 * @jest-environment node
 */

Bei mir funktioniert keine der oben genannten Lösungen. Ich benutze vue-cli mit Scherztests

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen