2014-02-18 24 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); 
}; 

希望能幫助你解決問題。

相關問題