单元测试控制器函数在NodeJS中发出外部HTTP请求

时间:2014-10-06 13:47:51

标签: javascript node.js testing mocha

大家好,所以我完全重写了这一点,并包含了我制作的一些代码。通常我会对此进行测试,但是我对如何处理此问题感到很遗憾。

我想从这个功能的单元测试开始。

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 个答案:

答案 0 :(得分: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);
});