Récemment, React a commencé à émettre des avertissements d'amortissement pour la méthode de cycle de vie componentWillReceiveProps
. J'utilise une bibliothèque qui a utilisé cette fonction et les responsables n'ont pas encore mis à jour leur base de code.
Actuellement, chaque fois que j'exécute mes tests, que ce soit en développement ou en CI, je reçois toujours environ 30 lignes d'avertissement de dépréciation pour chaque composant fourni par le responsable.
Existe-t-il un moyen de supprimer ces avertissements (au moins en cours de développement)?
ÉDITER:
Je suis prêt à ajouter certains commentaires dans mes fichiers pour désactiver les avertissements d'un package spécifique s'il y a une chance:
// some line to disable warnings for this package import { DateRangePicker } from 'react-dates';
3 Réponses :
Si vous souhaitez désactiver tous les avertissements qui remplissent certaines conditions, en conservant tous les autres avertissements, pour tous les tests:
const originalWarn = console.warn.bind(console.warn) beforeAll(() => { console.warn = (msg) => !msg.toString().includes('componentWillReceiveProps') && originalWarn(msg) }) afterAll(() => { console.warn = originalWarn })
React codebase contient également expect(render(...)).toWarnDev(...)
, mais ce n'est pas inclus dans la documentation de Jest , vous devrez peut-être enquêter davantage si vous souhaitez utiliser cette fonctionnalité.
où dois-je mettre le code fourni? car si je copie / colle le code exactement dans mon fichier de classe, il y a des erreurs.
@LukeCarelsen dans le fichier qui contient les tests, voir la documentation Setup and Teardown Jest
Je pense qu'il manque une parenthèse sur ton code
J'ai donc trouvé un moyen de corriger ces avertissements pour n'importe quelle bibliothèque en utilisant react-codemod. Étant donné que cette bibliothèque ne fonctionne pas à l'intérieur de node_modules, vous devez donc faire un petit hack.
Courir:
./node_modules/react-dates/lib/** // or any library with issue
./node_modules/.bin/react-codemod rename-unsafe-lifecycles
Courir:
+ // args.push('--ignore-pattern=/node_modules/');
À cette question répondez avec le chemin de la bibliothèque, vous voulez corriger ...
«Sur quels fichiers ou répertoire les codemods doivent-ils être appliqués?»
yarn add -D react-codemod open ./node_modules/react-codemod/bin/cli.js
Cela pourrait être un correctif temporaire jusqu'à ce que react-codemod supporte les bibliothèques node_modules. Vous pouvez également bifurquer la bibliothèque et supprimer la ligne pour vous-même et l'utiliser comme ceci dans votre pipeline CI pour ne plus recevoir d'avertissements comme celui-ci.
Je déconseille fortement de modifier quoi que ce soit dans node_modules. Cela nécessiterait de vérifier dans votre répertoire node_modules, ce que vous ne devriez normalement pas faire non plus. Bifurquer la bibliothèque est bien, mais utiliser jest.spyOn pour ignorer le message est une bien meilleure idée.
Un concept similaire à une réponse précédente, mais un peu plus simple serait:
let consoleSpy; beforeAll(() => { consoleSpy = jest.spyOn(global.console, 'warn').mockImplementation((message) => { // same implementation as above }); afterAll(() => consoleSpy.mockRestore());
Si vous vouliez le faire sur plusieurs tests, vous pourriez faire:
jest.spyOn(global.console, 'warn').mockImplementationOnce((message) => { if (!message.includes('componentWillReceiveProps')) { global.console.warn(message); } });
Vous pouvez essayer de remplacer
console.warn
Cela supprimera les avertissements partout. Je ne pense pas que ce soit une bonne idée. Lorsque je le remplace dans mes fichiers de test, rien ne se passe.
Avez-vous essayé avec le paramètre --silent pour Jest?
marquez ces méthodes UNSAFE_. c'est-à-dire que votre composantWillReceiveProps deviendra UNSAFE_componentWillReceiveProps. essaye ça. Je pense que cela vous débarrassera de ces avertissements.
@HarshitAgarwal ce n'est pas ma bibliothèque; alors, je ne peux pas le faire.
@Daniele mais cela désactive tous les avertissements. Je n'ai besoin de désactiver que cet avertissement. Ou seulement des avertissements pour un package spécifique.