これは現在不可能であり、将来可能になるかどうかはわかりません。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);
};
問題の解決に役立つことを願っています。