Pdf.js: getDocument se bloquea en el entorno Jest/JSDom

Creado en 18 mar. 2018  ·  4Comentarios  ·  Fuente: mozilla/pdf.js

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'));
  });
}
  • si testEnvironment se establece en "node" , tiene éxito.
  • si 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.

1-core

Comentario más útil

¡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!

Todos 4 comentarios

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

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

zerr0s picture zerr0s  ·  3Comentarios

xingxiaoyiyio picture xingxiaoyiyio  ·  3Comentarios

jigskpatel picture jigskpatel  ·  3Comentarios

aaronshaf picture aaronshaf  ·  3Comentarios

dmisdm picture dmisdm  ·  3Comentarios