Pdf.js: getDocument 在 Jest/JSDom 环境中挂起

创建于 2018-03-18  ·  4评论  ·  资料来源: mozilla/pdf.js

在 PDF.js 2.0.385 及更高版本上,运行以下最简单的示例:

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

显然,在 Node.js 上运行良好。

在 Jest 中运行相同的部分,如本例所示(简化,请忽略测试应该是异步的事实):

describe('Test', () => {
  it('does something', () => {
    pdf.getDocument({ data: arrayBufferData })
      .then(() => console.log('Success'))
      .catch() => console.log('Fail'));
  });
}
  • 如果testEnvironment设置为"node" ,则成功。
  • 如果testEnvironment设置为"jsdom" (默认),则挂起并且永远不会达到.then()

在 PDF.js 2.0.305 和更早版本上,这不是问题,因为您可以轻松地手动禁用工作器。

既然从 #9385 开始无法通过 config 执行此操作,所有使用 PDF.js 和 Jest/JSDom 的项目都将无法测试任何与 PDF.js 相关的内容。 将testEnvironment切换到"node"通常不是一个选项,因为这将导致前端的几乎所有其他内容都失败。

1-core

最有用的评论

我已经成功应对了! 对于像我这样卡住的人,不要设置pdfjs.GlobalWorkerOptions.workerSrcpdfjs.GlobalWorkerOptions.workerPort 。 相反,使用 pdf.worker.entry.js 文件 - 只需导入它就可以了!

所有4条评论

ISSUE_TEMPLATE.mdCONTRIBUTING.md中所述:
对于自定义实现的问题,您需要提供对完整的、小型的、可运行的示例的访问权限,以使问题具有可操作性。 并且请不要假设人们熟悉各种 JS 框架,在本例中是“Jest”。

没有任何上下文或代码,我会想到以下问题:
是否支持工人,如果支持,您是否尝试设置workerSrc选项并仅在启用工人的情况下运行测试?
您是否尝试过使用workerPort选项来加载工作文件? 请记住,也可以将工作人员传递给getDocument ,请参阅https://github.com/mozilla/pdf.js/blob/0d391daccc2f4e4b9c91268e719bd10fe63a49ae/src/display/api.js#L129 -L130

我已经成功应对了! 对于像我这样卡住的人,不要设置pdfjs.GlobalWorkerOptions.workerSrcpdfjs.GlobalWorkerOptions.workerPort 。 相反,使用 pdf.worker.entry.js 文件 - 只需导入它就可以了!

上面的解决方案对我不起作用,而是我不得不将 jest 配置为使用 node 而不是 jsdom (默认启用)

将此添加到我的规范文件的顶部解决了它

/**
 * @jest-environment node
 */

对我来说,上述解决方案都不起作用。 我在玩笑测试中使用 vue-cli

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

smit-modi picture smit-modi  ·  3评论

patelsumit5192 picture patelsumit5192  ·  3评论

timvandermeij picture timvandermeij  ·  4评论

BrennanDuffey picture BrennanDuffey  ·  3评论

aaronshaf picture aaronshaf  ·  3评论