unit тест вызывает ошибку, потому что .getContext() не реализован

Я пишу тесты с помощью Jest для компонентов, которые используют элементы холста. Я продолжаю получать сообщение об ошибке, когда я запускаю свои тесты, которые выглядят так.

Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)

Из моего понимания Jest использует jsdom для его тестирования и что jsdom совместим с холстом, если вы устанавливаете пакеты с холстом или холстом.

Я попытался установить каждый из этих пакетов, и ни одна из них не разрешила ошибку. Единственное, что, я думаю, могло бы пойти не так, так это то, что jsdom не может найти пакеты с холстом или холстом. Кто-нибудь знает способ исправить эту ошибку или тест, чтобы узнать, найдет ли jsdom другие пакеты? Большое спасибо!

Ответ 1

Вы можете создать свой собственный макет функции в скрипте установки Jest

HTMLCanvasElement.prototype.getContext = () => { 
  // return whatever getContext has to return
};

Ответ 2

У меня была похожая проблема с моими тестами Jest, и я решил ее, установив jest-canvas-mock.

Ответ 3

Оба ответа выше работают. Тем не менее, я просто хотел добавить, что в случае create-реагировать на приложение, он не поддерживает 'setupFiles', требуемый jest conf в package.json для jest-canvas-mock.

Я справился с этим, добавив оператор import в каждый из тестовых файлов, которые вызывали элемент canvas (в моем случае 3). Затем я переместил оператор импорта в файл setupTests.js и также удалил это требование.