【问题标题】:How can i watch console.log in terminal. Dalekjs我如何在终端中观看 console.log。达莱克
【发布时间】:2014-02-18 08:17:36
【问题描述】:

我有javascript:

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

我写了dalekjs-test:

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

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

我怎样才能得到它?

【问题讨论】:

    标签: dalekjs


    【解决方案1】:

    目前这是不可能的,我不知道将来是否可能。 问题是,您必须在浏览器中覆盖 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);
    };
    

    希望对您的问题有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-01-21
      • 2010-11-24
      • 2015-06-12
      • 2018-03-22
      • 2011-09-12
      • 2015-05-01
      • 2018-04-02
      • 2015-11-15
      • 2016-02-11
      相关资源
      最近更新 更多