2014-10-06 39 views
0

大家好,我已經完全重寫了這個,並且包含了我生成的一些代碼。通常情況下,我會首先進行測試,但是我對如何解決這個問題感到迷茫。單元測試控制器功能在NodeJS中發出外部HTTP請求

我想從此功能的單元測試開始。

exports.getMatches = function(callback) { 
    var url = "http://football-api.comapi/?Action=today&APIKey=" + secrets.APIKey + "&comp_id=1204"; 

    async.waterfall([ 
    function(callback) { 
     request(url, function (error, response, body) { 
     if (error) return (error); 
     var parsedJSON = JSON.parse(body); 
     var todaysMatches = parsedJSON.matches; 
     var schedule = new Schedule({ 
      date: dates.today // external module 
      matches: [] 
     }); 
     _.each(todaysMatches, function (match) { 
      schedule.matches.push({ 
      match_id: match.match_id, 
      match_time: match.match_time, 
      match_localteam_id: match.match_localteam_id, 
      match_localteam_name: match.match_localteam_name, 
      match_visitorteam_id: match.match_visitorteam_id, 
      match_visitorteam_name: match.match_visitorteam_name 
      }); 
     }); 
     callback(schedule); 
     }); 
    } 
    ], function(schedule) { 
    schedule.save(function (err) { 
     if (err) return (err); 
    }); 
    done(); 
    }); 
}; 

我真的很抱歉沒有提供任何形式的進展,因爲我只是在這裏有一個心理障礙。只有幾行代碼,但是有太多的事情要做,所以我不確定從哪裏開始/怎麼模擬/如何模擬它。

+1

是什麼問題? – webduvet 2014-10-06 14:02:01

+0

對不起,不清楚。我不確定如何編寫測試。我想檢查list函數是否有一個變量'parsedJSON',它保存我在'match_in_array'變量中嘲笑的數據。 – 2014-10-06 14:03:46

回答

1

聽起來像你想測試request()而不是你的實際控制器的方法。

您的單元測試應評估傳遞給list()回調的任何內容,並確定它是否已被相應地轉換。

例如,如果list()將您的JSON數組轉換爲HTML列表<ul><li /><li />...</ul>,則應測試響應/主體輸出以確定轉換是否成功。

var mockJSON = [{id: 1, name: 'spinach'}]; 
var expected = '<ul><li data-id="1">spinach</li></ul>'; 
//... 
matchController.list(function (error, response, body) { 
    // something like this... 
    expect(body).to.equal(expected); 
}); 
+0

感謝您的回覆。我可能會對我的測試方法感到有點迂腐,所以謝謝你的觀點。爲了給出一些上下文,我想將mockJSON保存到數據庫中。所以我想這是我的「預期」變量。您會建議在將數據保存到數據庫之前測試數據是否正確?或者只是在測試中的數據庫中查找它? – 2014-10-06 14:07:42

+1

就像你在嘲笑你的HTTP請求一樣,也要模擬你的數據庫調用。通過使用「假」數據庫,您可以測試以確保您的數據正在被控制器「存儲」。像這樣:https://gist.github.com/nicholascloud/8f8a50506cd3077b2bd1 – 2014-10-06 14:13:10

+0

嘿尼古拉斯,我花了一些時間試圖實現你的解決方案,但不能解決如何測試我的代碼中的邏輯。我首先寫了基本的功能,希望這可以給我一些測試的想法,但這並沒有發生。我已經包含了我必須測試的代碼。你有沒有可能給我一些關於如何開始單元測試的指導?謝謝 – 2014-10-07 02:04:22

相關問題