我正在尝试测试一些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.status
和err.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();
});
});
答案 0 :(得分:0)
最简单的方法是在REST调用中抛出一个错误,只需输入“/ player1 /”而不是播放器,或故意输入错误数据。
答案 1 :(得分:0)
您可以使用免费的HTTP模拟服务,例如mockable.io。这是一种测试应用程序可以处理不同类型响应(包括错误)的好方法。您在应用程序代码中更改的所有内容都是URL:您暂时将Ajax请求指向模拟API的URL。