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"
に切り替えることは通常オプションではありません。これにより、フロントエンド上の他のすべてが事実上失敗するためです。
ISSUE_TEMPLATE.mdとCONTRIBUTING.mdの両方で述べられているように:
カスタム実装の問題については、問題を実行可能にするために、完全で小さな実行可能な例へのアクセスを提供する必要があります。 また、人々がさまざまなJSフレームワーク(この場合は「Jest」)に精通していると思い込まないでください。
コンテキストやコードがないと、次の質問が思い浮かびます。
ワーカーはサポートされていますか?サポートされている場合は、 workerSrc
オプションを設定して、ワーカーを有効にしてテストを実行しようとしましたか?
workerPort
オプションを使用してワーカーファイルをロードしようとしましたか? ワーカーをgetDocument
に渡すことも可能であることに注意してください。https: //github.com/mozilla/pdf.js/blob/0d391daccc2f4e4b9c91268e719bd10fe63a49ae/src/display/api.js#L129-L130を参照してください。
私はなんとかそれに対処することができました! 私のように立ち往生している人のために、 pdfjs.GlobalWorkerOptions.workerSrc
またはpdfjs.GlobalWorkerOptions.workerPort
を設定しないでください。 代わりに、pdf.worker.entry.jsファイルを使用してください-それをインポートするだけで完了です!
上記の解決策は私にはうまくいきませんでした、代わりに私はjsdomの代わりにノードを使用するようにjestを構成する必要がありました(デフォルトで有効になっています)
これをスペックファイルの先頭に追加すると解決しました
/**
* @jest-environment node
*/
私にとって、上記の解決策はどれも機能していません。 jestテストでvue-cliを使用しています
最も参考になるコメント
私はなんとかそれに対処することができました! 私のように立ち往生している人のために、
pdfjs.GlobalWorkerOptions.workerSrc
またはpdfjs.GlobalWorkerOptions.workerPort
を設定しないでください。 代わりに、pdf.worker.entry.jsファイルを使用してください-それをインポートするだけで完了です!