检测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 );
如果你正在使用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