Sie sollten nicht tr y, um console.log selbst nachzuahmen, ist es besser, wenn Ihre Knotenmodule ein Protokollierungsobjekt verwenden. Auf diese Weise können Sie während des Tests eine Alternative (z. B. einen Schein) bereitstellen. Zum Beispiel:
<my_logger.js>
module.exports = {
err: function(message) {
console.log(message);
}
}
<my_module.js>
var DefaultLogger = require('my_logger.js');
module.exports = function(logger) {
this.log = logger || DefaultLogger;
// Other setup goes here
};
module.exports.prototype.myMethod = function() {
this.log.err('Error message.');
};
<my_module_test.js>
var MyModule = require('my_module.js');
describe('Test Example', function() {
var log_mock = { err: function(msg) {} };
it('Should not output anything.', function() {
var obj = new MyModule(log_mock);
obj.myMethod();
});
});
Der Code hier habe ich vereinfacht, da der eigentliche Test nicht der Grund für das Beispiel ist. Lediglich das Einfügen von alternativer Protokollierung.
Wenn Sie eine große Codebase mit vielen console.log-Aufrufen haben, ist es besser, den Code einfach zu aktualisieren, wenn Sie Tests für jede Methode hinzufügen. Wenn Sie Ihre Protokollierung auf diese Weise aktivieren, wird Ihr Code einfacher und empfänglicher für Tests. Außerdem sind viele Protokollierungs-Frameworks für Knoten verfügbar. console.log ist während der Entwicklung in Ordnung, wenn Sie nur etwas ausgeben wollen, um zu sehen, was gerade passiert. Versuchen Sie jedoch, wenn möglich, die Verwendung als Protokollierungslösung zu vermeiden.
Aber Gibt es eine Möglichkeit console.log zu verspotten? Ich denke, das wird die beste Lösung sein, um Testfälle zu schreiben. –
Dies ist Spott console.log. Was hast du vor, wenn du "Spott" sagst? –
Verspotten beim Schreiben von Testfällen bedeutet, ich möchte nicht, dass diese Funktion ausgeführt wird, aber ich kann jede Eingabe geben und auch ausgegeben werden. Mocking DB-Verbindung, API-Aufrufe. Ich hoffe du hast es verstanden. –