Pdf.js: getDocument trava no ambiente Jest/JSDom

Criado em 18 mar. 2018  ·  4Comentários  ·  Fonte: mozilla/pdf.js

No PDF.js 2.0.385 e posterior, executando o exemplo mais simples a seguir:

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

roda bem no Node.js, obviamente.

Executando a mesma peça no Jest, como neste exemplo (simplificado, ignore o fato de que os testes devem ser assíncronos):

describe('Test', () => {
  it('does something', () => {
    pdf.getDocument({ data: arrayBufferData })
      .then(() => console.log('Success'))
      .catch() => console.log('Fail'));
  });
}
  • se testEnvironment for definido como "node" , será bem-sucedido.
  • se testEnvironment estiver definido como "jsdom" (padrão), trava e nunca atinge .then() .

No PDF.js 2.0.305 e anteriores, isso não é um problema, porque você pode desabilitar facilmente os trabalhadores manualmente.

Agora que não há como fazer isso via configuração a partir do #9385, todos os projetos usando PDF.js e Jest/JSDom não poderão testar nada relacionado a PDF.js. Alternar testEnvironment para "node" geralmente não é uma opção, pois isso fará com que praticamente tudo no front-end falhe.

1-core

Comentários muito úteis

Eu consegui lidar com isso! Para aqueles presos como eu, NÃO defina pdfjs.GlobalWorkerOptions.workerSrc ou pdfjs.GlobalWorkerOptions.workerPort . Em vez disso, use o arquivo pdf.worker.entry.js - basta importá-lo e pronto!

Todos 4 comentários

Conforme mencionado em ISSUE_TEMPLATE.md e CONTRIBUTING.md :
Para problemas com implementações personalizadas, você precisa fornecer acesso a um exemplo executável completo e pequeno para que o problema seja acionável. E por favor não assuma que as pessoas estão familiarizadas com vários frameworks JS, neste caso "Jest".

Sem nenhum contexto ou código, as seguintes perguntas vêm à mente:
Os workers são suportados e, em caso afirmativo, você tentou definir a opção workerSrc e apenas executar testes com os workers ativados?
Você já tentou usar a opção workerPort para carregar o arquivo do trabalhador? Lembre-se de que também é possível passar um trabalhador para getDocument , consulte https://github.com/mozilla/pdf.js/blob/0d391daccc2f4e4b9c91268e719bd10fe63a49ae/src/display/api.js#L129 -L130

Eu consegui lidar com isso! Para aqueles presos como eu, NÃO defina pdfjs.GlobalWorkerOptions.workerSrc ou pdfjs.GlobalWorkerOptions.workerPort . Em vez disso, use o arquivo pdf.worker.entry.js - basta importá-lo e pronto!

A solução acima não funcionou para mim, em vez disso, tive que configurar o jest para usar node em vez de jsdom (ativado por padrão)

Adicionando isso ao topo do meu arquivo de especificações resolveu

/**
 * @jest-environment node
 */

Para mim, nenhuma das soluções acima está funcionando. Estou usando vue-cli com testes jest

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jigskpatel picture jigskpatel  ·  3Comentários

xingxiaoyiyio picture xingxiaoyiyio  ·  3Comentários

zerr0s picture zerr0s  ·  3Comentários

dmisdm picture dmisdm  ·  3Comentários

liuzhen2008 picture liuzhen2008  ·  4Comentários