2014-10-06 86 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