Pdf.js: getDocument зависает в среде Jest/JSDom

Созданный на 18 мар. 2018  ·  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, все проекты, использующие PDF.js и Jest/JSDom, не смогут протестировать что-либо, связанное с PDF.js. Переключение testEnvironment на "node" обычно не вариант, так как это приведет к сбою практически всего остального на интерфейсе.

Самый полезный комментарий

Мне удалось с этим справиться! Для тех, кто застрял, как я, НЕ устанавливайте pdfjs.GlobalWorkerOptions.workerSrc или pdfjs.GlobalWorkerOptions.workerPort . Вместо этого используйте файл pdf.worker.entry.js — просто импортируйте его, и все готово!

Все 4 Комментарий

Как упоминалось в ISSUE_TEMPLATE.md и CONTRIBUTING.md :
Для проблем с пользовательскими реализациями вам необходимо предоставить доступ к полному и небольшому работающему примеру, чтобы проблему можно было решить. И, пожалуйста, не думайте, что люди знакомы с различными JS-фреймворками, в данном случае с Jest.

Без какого-либо контекста или кода на ум приходят следующие вопросы:
Поддерживаются ли рабочие процессы, и если да, пытались ли вы установить параметр workerSrc и просто запускать тесты с включенными рабочими процессами?
Вы пытались использовать опцию workerPort для загрузки рабочего файла? Имейте в виду, что также можно передать работника getDocument , см .

Мне удалось с этим справиться! Для тех, кто застрял, как я, НЕ устанавливайте pdfjs.GlobalWorkerOptions.workerSrc или pdfjs.GlobalWorkerOptions.workerPort . Вместо этого используйте файл pdf.worker.entry.js — просто импортируйте его, и все готово!

Приведенное выше решение не сработало для меня, вместо этого мне пришлось настроить jest для использования узла вместо jsdom (по умолчанию включено)

Добавление этого в начало моего файла спецификации решило это

/**
 * @jest-environment node
 */

Для меня ни одно из вышеперечисленных решений не работает. Я использую vue-cli с шуточными тестами

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

aaronshaf picture aaronshaf  ·  3Комментарии

timvandermeij picture timvandermeij  ·  4Комментарии

smit-modi picture smit-modi  ·  3Комментарии

dmisdm picture dmisdm  ·  3Комментарии

patelsumit5192 picture patelsumit5192  ·  3Комментарии