1

我有 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

我怎么才能得到它?

4

1 回答 1

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);
};

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

于 2014-03-07T11:38:53.083 回答