Maison >interface Web >js tutoriel >Comment faire taire temporairement les journaux dans les tests
Le package Logger dans le code source de Changesets fournit une documentation sur la mise au silence des messages de journal dans les tests. Cela m'a amené à me demander comment les Changesets procédaient et m'a fait examiner son code source.
J'ai recherché temporairement des SilenceLogs dans le référentiel Changesets à l'aide de la recherche Github.
Ce qui m'a fait choisir de rechercher temporairement SilenceLogs, c'est le fait qu'il soit mentionné dans le Logger
package Lisez-moi.
import { temporarilySilenceLogs } from "@changesets/test-utils"; import { log } from "@changesets/logger"; temporarilySilenceLogs(); // Now the logs in this test file are not actually logged to std out log("I am not logged"); // Use console.log to log messages in tests if required console.log("Yay, I am logged");
Lorsque vous essayez de comprendre le code source, vous pouvez utiliser la documentation comme point de départ et rechercher des variables et des fonctions pour définir la direction de votre exploration lorsque vous traitez de grands projets comme les Changesets.
Le code ci-dessous est extrait du code source des Changesets.
Cette fonction accepte une fonction comme argument puis fait taire les journaux à l'aide d'une fonction nommée createLogSilencer.
Faites attention à la fonction de configuration ici :
const dispose = silencer.setup(); try { await testFn(); } finally { dispose(); }
Le code ci-dessous est sélectionné dans les ensembles de modifications
const createLogSilencer = () => { const originalLoggerError = logger.error; const originalLoggerInfo = logger.info; const originalLoggerLog = logger.log; const originalLoggerWarn = logger.warn; const originalLoggerSuccess = logger.success; const originalConsoleError = console.error; const originalConsoleInfo = console.info; const originalConsoleLog = console.log; const originalConsoleWarn = console.warn; const originalStdoutWrite = process.stdout.write; const originalStderrWrite = process.stderr.write; return { setup() { logger.error = jest.fn(); logger.info = jest.fn(); logger.log = jest.fn(); logger.warn = jest.fn(); logger.success = jest.fn(); console.error = jest.fn(); console.info = jest.fn(); console.log = jest.fn(); console.warn = jest.fn(); process.stdout.write = jest.fn(); process.stderr.write = jest.fn(); return () => { logger.error = originalLoggerError; logger.info = originalLoggerInfo; logger.log = originalLoggerLog; logger.warn = originalLoggerWarn; logger.success = originalLoggerSuccess; console.error = originalConsoleError; console.info = originalConsoleInfo; console.log = originalConsoleLog; console.warn = originalConsoleWarn; process.stdout.write = originalStdoutWrite; process.stderr.write = originalStderrWrite; }; }, }; };
Que se passe-t-il ici ?
const originalLoggerError = logger.error; const originalLoggerInfo = logger.info; const originalLoggerLog = logger.log; const originalLoggerWarn = logger.warn; const originalLoggerSuccess = logger.success; const originalConsoleError = console.error; const originalConsoleInfo = console.info; const originalConsoleLog = console.log; const originalConsoleWarn = console.warn; const originalStdoutWrite = process.stdout.write; const originalStderrWrite = process.stderr.write;
2. Configuration des retours
Si vous avez remarqué ci-dessus, la configuration est appelée dans temporairementSilenceLogs, ceci est renvoyé par createLogSilencer
return { setup() { logger.error = jest.fn(); logger.info = jest.fn(); logger.log = jest.fn(); logger.warn = jest.fn(); logger.success = jest.fn(); console.error = jest.fn(); console.info = jest.fn(); console.log = jest.fn(); console.warn = jest.fn(); process.stdout.write = jest.fn(); process.stderr.write = jest.fn(); return () => { logger.error = originalLoggerError; logger.info = originalLoggerInfo; logger.log = originalLoggerLog; logger.warn = originalLoggerWarn; logger.success = originalLoggerSuccess; console.error = originalConsoleError; console.info = originalConsoleInfo; console.log = originalConsoleLog; console.warn = originalConsoleWarn; process.stdout.write = originalStdoutWrite; process.stderr.write = originalStderrWrite; }; }, };
Que se passe-t-il dans la fonction de configuration ?
2.1 Les enregistreurs et l'API de la console sont initialisés à jest.fn()
logger.error = jest.fn(); logger.info = jest.fn(); logger.log = jest.fn(); logger.warn = jest.fn(); logger.success = jest.fn(); console.error = jest.fn(); console.info = jest.fn(); console.log = jest.fn(); console.warn = jest.fn(); process.stdout.write = jest.fn(); process.stderr.write = jest.fn();
Cela fait pratiquement taire les journaux puisque jest.fn() est appelé lorsque vous utilisez un enregistreur, ceci est donc considéré comme une configuration, une étape importante pour faire taire vos journaux.
La configuration 2.2 renvoie les enregistreurs d'origine
Si vous l'avez remarqué, la séquence d'appels de fonction est
a. const silencieux = createLogSilencer();
b. const dispose = silencieux.setup();
c. Dans le bloc final.
try { await testFn(); } finally { dispose(); }
dispose est renvoyé par la fonction de configuration renvoyée par createLogSilencer. Cette étape restaure le mécanisme de journalisation après l'exécution de votre fonction de test.
Chez Thinkthroo, nous étudions les grands projets open source et fournissons des guides architecturaux. Nous avons développé des composants réutilisables, construits avec tailwind, que vous pouvez utiliser dans votre projet. Nous proposons des services de développement Next.js, React et Node.
Prenez rendez-vous avec nous pour discuter de votre projet.
https://github.com/changesets/changesets/tree/main/packages/logger#silencing-messages-in-tests
https://github.com/search?q=repo:changesets/changesets temporairementSilenceLogs &type=code
https://github.com/changesets/changesets/blob/baf56448606e005577dbe2fb1e78ff457dcaaefd/scripts/test-utils/src/index.ts#L16
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!