10
votes

Détecter la console.log () appels

J'essaie d'écrire un cas de test pour une méthode de débogage qui écrit des messages à la console JavaScript à l'aide de console.log () . Le test doit vérifier que le message a été écrit avec succès à la console. J'utilise jQuery.

Y a-t-il un moyen de joindre un crochet à console.log () ou de vérifier autrement qu'un message a été écrit sur la console ou sur toute autre suggestion sur la manière d'écrire le cas d'essai? < / p>


0 commentaires

5 Réponses :


24
votes

console.log code> ne conserve pas un enregistrement de messages enregistrés ou émettre des événements que vous pourriez écouter. Il n'est pas possible que vos tests vérifient directement sa sortie de JavaScript. Au lieu de cela, votre code de test devra remplacer console.log code> avec une implémentation Mock forte> Conservez la trace des messages du journal pour une vérification ultérieure.

Mocking est une caractéristique commune prise en charge par la plupart des cadres de test JavaScript. Par exemple, Le cadre de test JEST fournit un jest.spyon Code> fonction qui remplace une méthode donnée avec une implémentation simulée qui enregistre les arguments pour chaque appel dans un .Mock code> propriété avant de les transmettre à la mise en œuvre initiale. Après chaque test, vous voudrez peut-être appeler jest.clearallmocks () code > pour réinitialiser les listes d'arguments enregistrées pour le prochain test ou utiliser L'équivalent ClearMocks: true code> option de configuration . p> xxx pré> xxx pré>

Si vous n'utilisez pas de cadre de test (vous n'utilisez pas devrait probablement), vous pouvez créer une maquette simple vous-même. P>

function testSomething() {
  // Replace console.log with stub implementation.
  const originalLog = console.log;
  const calls = [];
  console.log = (...args) => {
    calls.push(args);
    originalLog(...args);
  };

  try {
    console.assert(calls.length == 0);
    saySomething();
    console.assert(calls.length == 1);
    console.assert(calls[0][0] == "Hello World");
  } catch (error) {
    console.error(error);
  } finally {
    // Restore original implementation after testing.
    console.log = originalLog;
  }
}


3 commentaires

Brillant. Si simple mais cela ne me serait pas eue.


Cela ne gère pas lorsque vous donnez plusieurs arguments à console.log , il lance tout sauf le premier.


@ NH2 assez vrai! Fixé.



5
votes

Joindre votre propre fonction à la console.log. Sur votre page, après toutes les charges,

Avant de démarrer des tests - p> xxx pré>

après avoir exécuté des tests, si nécessaire - P>

console.log = originalLog


0 commentaires

10
votes

Alors pas de mauvaises solutions, mais si vous recherchez un enregistreur à haute puissance, essayez Paul Irish's journal ()

Si c'est trop élevé, vous pouvez obtenir avec quelque chose comme ça. P>

console.log('I','have','an','important','message');
//Use native one instead
_log.call( console, _log.history );


1 commentaires

Comment puis-je vérifier si quelque chose existe dans le journal alors?



9
votes

Si vous utilisez Jasmine, il est mort simple: xxx

tête sur Jasmine Docs Pour plus d'informations.


1 commentaires

Ou, si vous utilisez la Jest (qui est essentiellement construite sur, de jasmin), il suffit de remplacer le spyon ... ligne avec console.log = jest.fn (); .



0
votes

Probablement la solution la plus simple consiste à utiliser le package NPM STD-MOCKS .

de leur documentation: xxx

note : assurez-vous que vous stdmocks.restore () < / Code> Avant vos affirmations afin que votre test de test soit toujours en mesure de connecter des informations sur les assertions infructueuses.


0 commentaires