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 Y a-t-il un moyen de joindre un crochet à console.log () code>. Le test doit vérifier que le message a été écrit avec succès à la console. J'utilise jQuery. P>
console.log () code> 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>
5 Réponses :
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 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> 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
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> 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;
}
}
Brillant. Si simple mais cela ne me serait pas eue.
Cela ne gère pas lorsque vous donnez plusieurs arguments à console.log code>, il lance tout sauf le premier.
@ NH2 assez vrai! Fixé.
Joindre votre propre fonction à la console.log. Sur votre page, après toutes les charges,
Avant de démarrer des tests - p> après avoir exécuté des tests, si nécessaire - P> console.log = originalLog
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 );
Comment puis-je vérifier si quelque chose existe dans le journal alors?
Si vous utilisez Jasmine, il est mort simple: tête sur Jasmine Docs Pour plus d'informations. P> P>
Ou, si vous utilisez la Jest (qui est essentiellement construite sur, de jasmin), il suffit de remplacer le console.log = jest.fn (); code>.
Probablement la solution la plus simple consiste à utiliser le package NPM STD-MOCKS code>
.
de leur documentation: p> stdmocks.restore () < / Code> Avant vos affirmations afin que votre test de test soit toujours en mesure de connecter des informations sur les assertions infructueuses. P> P>