2014-02-11 175 views
1

我最近剛剛轉移到一個主要處理Javascript的新項目(作爲Node.js Web應用程序)。我該如何測試這段代碼?

我是一個相當重視TDD的開發人員,正在努力弄清楚最好的方法/模式,以確保我們最終構建的是單元可測試和可維護的。

我一直在試圖用單元測試來包裝下面的代碼片段,但是在作爲請求回調傳入的匿名函數中獲得良好的代碼覆蓋率時遇到了問題。

我使用rewire.js庫嘲笑了請求對象,並且可以成功地測試該記錄器是否被調用,該請求是否使用正確的參數調用,但是如何完成此測試覆蓋?

function _makeRequest(apiName, options, payload, callback) { 
    logger.info('DS API %s Request:\n %s %s\n %s', apiName, options.method, options.url, logger.look(payload)); 
    request(options, function(error, response, body) { 
    var json = 'json' in options ? body : JSON.parse(body); 

    if ('error' in json) { 
     var msg = 'DS API ' + apiName + ' Error:\n ' + logger.look(json.error); 
     logger.info(msg); 
     callback(null); 
    } else { // no error 
     logger.info('DS API %s Response:\n %s', apiName, logger.look(json)); 
     callback(json); 
    } 
    }); 
} 

我應該重構更好的可測試性嗎?有沒有我不知道的單元測試回調的常用方法?

+0

您的匿名函數只是有兩個分支點。爲了全面覆蓋,您需要提供包含「選項」的選項,並且使用包含「錯誤」的json。這應該是非常簡單的。 –

回答

0

Carl把我放在正確的方向。我已經爲輸入數據的範圍設置了我的測試參數(以確保所有代碼行將在一個測試或另一個測試中執行),但最終在傳遞給它之後未能真正執行回調參數rewire.js模擬。

回調是使得它在,但我需要從模擬中執行它,以確保回調代碼仍將執行