В 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"
обычно не вариант, так как это приведет к сбою практически всего остального на интерфейсе.
Как упоминалось в 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 с шуточными тестами
Самый полезный комментарий
Мне удалось с этим справиться! Для тех, кто застрял, как я, НЕ устанавливайте
pdfjs.GlobalWorkerOptions.workerSrc
илиpdfjs.GlobalWorkerOptions.workerPort
. Вместо этого используйте файл pdf.worker.entry.js — просто импортируйте его, и все готово!