2014-02-18 22 views
1

我的javascript:如何在终端中观看console.log。 Dalekjs

$('#link').on('click', function() 
{ 
    console.log('Click link'); 
}); 

而且我写dalekjs测试:

module.exports = { 
    'Clicked link': function (test) 
    { 
     test.open('http://localhost/') 
      .click('#link') 
      .done(); 
    } 
}; 

运行$ dalek tests/test.js后,我想看到Click link

我该如何得到它?

回答

2

这是目前不可能的&我不知道未来是否有可能。 问题是,您必须覆盖浏览器中的console对象。这意味着,你必须积极改变用户环境中的某些东西。我不认为这是一个好主意。

虽然,有可能是你的问题的解决办法;)

比方说,你写一个调试功能(作为客户端的JavaScript文件)是这样的:

window.myDebugLog = []; 
window.myDebug = function() { 
    var list = Array.prototype.slice.call(arguments, 0); 
    window.myDebugLog.push(list); 
} 

现在,让我们修改日志记录功能的位:

$('#link').on('click', function() { 
    var msg = 'Click link'; 
    console.log(msg); 
    window.myDebug(msg); 
}); 

有了这个,你可以访问&输出的记录。更妙的是,使用一些ClojureCompiler或Esprima的乐趣时,您可以在构建生产代码时解析出调试的东西,这样就不需要发布它。

在你Dalek的测试,只是这样做:

module.exports = { 
    'Clicked link': function (test) { 
    test.open('http://localhost/') 
     .click('#link') 
     .execute(function() { 
      this.data('logs', window.myDebugLog); 
     }) 
     .log.message(function() { 
      return JSON.stringify(test.data('logs').pop()); 
     }) 
     .done(); 
    } 
}; 

这将使你在命令行输出的日志的东西。 如果你不愿意添加这个额外的函数调用,你也可以自己覆盖console.log。但这可能会导致一些麻烦,所以请带上一点盐:

window.myDebugLog = []; 
window.oldLog = console.log; 
console.log = function() { 
    var list = Array.prototype.slice.call(arguments, 0); 
    window.myDebugLog.push(list); 
    window.oldLog.apply(console, list); 
}; 

希望能帮助你解决问题。

相关问题