API测试中的模拟响应

时间:2015-07-13 18:52:54

标签: javascript node.js jasmine jasmine-node

我正在尝试测试一些API路由并且我的代码覆盖率很好,但我一直错过err分支。下面是我的一个API路由控制器的示例。

var index = function(req, res) {
  request({url: privateUrl + '/players/' + req.params.playerId + '/games',
    headers: {'Accept': 'application/json', 'Content-Type': 'application/json'},
    method: 'GET'}, function(err, response, body) {
      if (err) {
        logger.warn('Error while retrieving games for player %d.', req.params.playerId, err);
        return res.status(500).json({
          message: err.message ? err.message : 'Error while retrieving player games.'
        });
      } else {
        res.json(helpers.JSONparse(body).response);
      }
    });
};

我如何测试err案例?我理想的做法是.set('err', true),然后测试res.statuserr.message是我期望的。这是我测试成功响应的规范:

it('should return an object with player games', function(done) {
  request
    .get('/api/players/' + playerId + '/games')
    .set('Content-Type', 'application/json')
    .set('cookie', cookie)
    .expect(200)
    .expect('Content-Type', /json/)
    .end(function(err, res) {
      expect(err).toBeNull(err ? err.message : null);
      expect(res.body.games).toBeDefined();
      done();
    });
});

2 个答案:

答案 0 :(得分:0)

最简单的方法是在REST调用中抛出一个错误,只需输入“/ player1 /”而不是播放器,或故意输入错误数据。

答案 1 :(得分:0)

您可以使用免费的HTTP模拟服务,例如mockable.io。这是一种测试应用程序可以处理不同类型响应(包括错误)的好方法。您在应用程序代码中更改的所有内容都是URL:您暂时将Ajax请求指向模拟API的URL。