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'));
});
}
testEnvironment
for definido como "node"
, será bem-sucedido.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.
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
Comentários muito úteis
Eu consegui lidar com isso! Para aqueles presos como eu, NÃO defina
pdfjs.GlobalWorkerOptions.workerSrc
oupdfjs.GlobalWorkerOptions.workerPort
. Em vez disso, use o arquivo pdf.worker.entry.js - basta importá-lo e pronto!