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'));
});
}
testEnvironment
auf "node"
gesetzt ist, erfolgreich.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.
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
Hilfreichster Kommentar
Ich habe es geschafft, damit umzugehen! Für diejenigen, die wie ich feststecken, setzen Sie NICHT
pdfjs.GlobalWorkerOptions.workerSrc
oderpdfjs.GlobalWorkerOptions.workerPort
. Verwenden Sie stattdessen die Datei pdf.worker.entry.js - einfach importieren und fertig!