web-dev-qa-db-fra.com

le test unitaire génère une erreur car .getContext () n'est pas implémenté

J'écris des tests en utilisant Jest pour les composants qui utilisent des éléments de canevas. Je reçois toujours une erreur lorsque je lance mes tests qui ressemble à ceci.

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

D'après ma compréhension, Jest utilise jsdom pour ses tests et ce jsdom est compatible avec canvas si vous installez les packages canvas ou canvas-prebuilt.

J'ai essayé d'installer chacun de ces packages et aucun d'eux n'a résolu l'erreur. La seule chose qui, à mon avis, pourrait mal tourner est que jsdom ne peut pas trouver le canevas ou les paquets préconstruits. Est-ce que quelqu'un connaît un moyen de corriger cette erreur ou de tester pour voir si jsdom trouve les autres packages? Merci beaucoup!

16
lpie88

Vous pouvez créer votre propre maquette de la fonction dans un script de configuration jest

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

J'ai eu un problème similaire avec mes tests Jest et je l'ai résolu en installant jest-canvas-mock .

5
ElectroBuddha

Les deux réponses ci-dessus fonctionnent. Cependant, je voulais juste ajouter qu'en cas de create-react-app, il ne prend pas en charge les 'setupFiles' requis par jest conf dans package.json pour jest-canvas-mock.

J'ai contourné cela en ajoutant l'instruction d'importation dans chacun des fichiers de test qui invoquaient l'élément canvas (dans mon cas 3). Ensuite, j'ai déplacé l'instruction import vers le fichier setupTests.js et supprimé également cette exigence.

1
Amrita Yadav