如何对此代码段进行单元测试?

时间:2014-02-11 16:49:10

标签: javascript node.js unit-testing callback tdd

我刚刚搬到了一个主要处理Javascript(作为Node.js网络应用程序)的新项目。

我是一个专注于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);
    }
  });
}

我应该重构以获得更好的可测试性吗?我不知道单元测试回调的常用方法吗?

1 个答案:

答案 0 :(得分:0)

Carl让我朝着正确的方向前进。我已经为测试设置了我的参数,并提供了大量的输入数据(以确保所有代码行都在一个或另一个测试中执行)但是,最后,在将它传递给后,实际上没有实际执行回调参数rewire.js模拟。

回调正在进行,但我需要在模拟中执行它以确保仍然可以执行回调代码