检测console.log()调用

我正在尝试编写一个调试方法的测试用例,该方法使用console.log()将消息写入JavaScript控制台。 测试必须检查消息是否已成功写入控制台。 我正在使用jQuery。

有没有办法将一个挂钩附加到console.log()或以其他方式检查是否已将消息写入控制台,或者有关如何编写测试用例的任何其他建议?

您可以使用自己的函数替换console.log ,这将确定是否已正确调用它。 以下是如何确认函数记录特定消息的示例:

 function doesLogMessage(f, message) { var oldLog = console.log, result = false; console.log = function(s) { if (s == message) { result = true; } }; f(); console.log = oldLog; return result; } 

示例用法

 function exampleFunction() { console.log("Hello World"); } doesLogMessage(exampleFunction, "Hello World"); // true 

 function exampleFunction2() { console.log("Preparing world..."); console.log("Hello World"); } doesLogMessage(exampleFunction2, "Hello World"); // true 

 function exampleFunction3() { } doesLogMessage(exampleFunction3, "Hello World"); // false 

 function exampleFunction4() { console.log("Goodbye World"); } doesLogMessage(exampleFunction4, "Hello World"); // false 

所以不错的解决方案,但如果你正在寻找一个高功率记录器尝试保罗爱尔兰的日志()

如果它的功率太大,你可以用这样的东西。

 var console = window.console, _log = console ? console.log : function(){}; _log.history = []; console.log = function( ){ _log.history.push.apply( _log.history, arguments ); _log.apply( console, arguments ); } 

用法

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

http://jsfiddle.net/BeXdM/

如果你正在使用Jasmine,它很简单:

 it('is my test', function () { spyOn(console, 'log'); // do your stuff that should log something expect(console.log).toHaveBeenCalledWith('something'); }); 

前往Jasmine docs获取更多信息。

只需将自己的函数附加到console.log即可。 在你的页面上,一切都加载后,

在开始测试之前 –

 var originalLog = console.log; console.log = function(msg){ alert('my .log hook received message - '+msg); //add your logic here } 

运行测试后,如有必要 –

 console.log = originalLog