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 に答える