En PDF.js 2.0.385 y versiones posteriores, ejecute el siguiente ejemplo más simple:
pdf.getDocument({ data: arrayBufferData })
.then(() => console.log('Success'))
.catch() => console.log('Fail'));
funciona bien en Node.js, obviamente.
Ejecutando la misma pieza en Jest, como en este ejemplo (simplificado, ignore el hecho de que las pruebas deben ser asíncronas):
describe('Test', () => {
it('does something', () => {
pdf.getDocument({ data: arrayBufferData })
.then(() => console.log('Success'))
.catch() => console.log('Fail'));
});
}
testEnvironment
se establece en "node"
, tiene éxito.testEnvironment
se establece en "jsdom"
(predeterminado), se cuelga y nunca llega a .then()
.En PDF.js 2.0.305 y versiones anteriores, esto no es un problema, ya que puede deshabilitar fácilmente a los trabajadores de forma manual.
Ahora que no hay forma de hacerlo a través de la configuración a partir del #9385, todos los proyectos que usen PDF.js y Jest/JSDom no podrán probar nada relacionado con PDF.js. Cambiar testEnvironment
a "node"
generalmente no es una opción, ya que esto hará que prácticamente todo lo demás en el front-end falle.
Como se menciona en ISSUE_TEMPLATE.md y CONTRIBUTING.md :
Para problemas con implementaciones personalizadas, debe proporcionar acceso a un ejemplo ejecutable completo y pequeño para que el problema sea procesable. Y no asuma que las personas están familiarizadas con varios marcos JS, en este caso "Jest".
Sin ningún contexto o código, las siguientes preguntas vienen a la mente:
¿Son compatibles los trabajadores y, de ser así, ha intentado configurar la opción workerSrc
y simplemente ejecutar pruebas con los trabajadores habilitados?
¿Ha intentado usar la opción workerPort
para cargar el archivo de trabajo? Tenga en cuenta que también es posible pasar un trabajador a getDocument
, consulte https://github.com/mozilla/pdf.js/blob/0d391daccc2f4e4b9c91268e719bd10fe63a49ae/src/display/api.js#L129 -L130
¡Me las he arreglado para lidiar con eso! Para aquellos atascados como yo, NO configure pdfjs.GlobalWorkerOptions.workerSrc
o pdfjs.GlobalWorkerOptions.workerPort
. En su lugar, utilice el archivo pdf.worker.entry.js; ¡simplemente impórtelo y listo!
La solución anterior no funcionó para mí, en su lugar, tuve que configurar jest para usar el nodo en lugar de jsdom (habilitado de forma predeterminada)
Agregar esto a la parte superior de mi archivo de especificaciones lo resolvió
/**
* @jest-environment node
*/
Para mí, ninguna de las soluciones anteriores está funcionando. Estoy usando vue-cli con pruebas de broma
Comentario más útil
¡Me las he arreglado para lidiar con eso! Para aquellos atascados como yo, NO configure
pdfjs.GlobalWorkerOptions.workerSrc
opdfjs.GlobalWorkerOptions.workerPort
. En su lugar, utilice el archivo pdf.worker.entry.js; ¡simplemente impórtelo y listo!