我正忙着为我写的现有nodejs api构建功能测试。我正在使用mocha和expect.js。
一个失败的测试是我想对url参数的存在进行负面测试。我想要的是如果缺少参数,则将消息发送回服务的消费者。
目前我的正面测试有效:
var request = require('request');
it('get a specific user from the api', function (done) {
request.get('http://localhost:8080/api/v1/user/123', function (error, response, body) { ... });
});
但是,以下操作不起作用,我得到的是超时:
it('should return a 400 message if UserId is not supplied stating that "UserId expected"', function(done) {
request.get('http://localhost:8080/api/v1/user/', function (error, response, body) {
if (!error && response.statusCode == 400) {
expect(body).to.be.equal('UserId expected');
done();
}
});
});
以上测试均测试此端点:
app.get('/api/v1/user/:userid', function (req, res) {
if(!req.params.userid) {
return res.status(400).json('UserId expected');
}
... get the user and return it with status 200 ...
});
然而,如前所述,第一次测试成功,而第二次测试超时。
更新1: 另外,我得到以下输出:
GET /api/v1/user/123 200 2.905 ms - 274
GET /api/v1/user/ - - ms - -
更新2: 因此,添加以下代码可以解决问题,但并不能解决问题:
app.get('/api/v1/user', function (req, res) {
return res.status(400).json('UserId expected');
});
显然,我并不想要一个相当多余的代码。我很困惑,为什么我不能进入' api / v1 / user /:userid'端点,只测试那里:userid
的存在?它好像nodejs要求存在:userid
,否则端点不存在。这是对的吗?
我错过了什么?
答案 0 :(得分:0)
根据mocha documentation,必须始终调用完成的回调,如果出现错误。实际上它接受错误。 所以我认为你必须用以下代码重写你的代码:
$cats = get_the_category( $post->ID );
答案 1 :(得分:0)
所以我做了一些调查,并就此问题提出了另一个问题here。
最后问题是我没有完全理解快递框架。基本上我在我的问题的更新2中提到的是我需要遵循的路由并指定一个不需要参数的路由,但返回我在这种情况下预期的错误消息。
我对这种方法的问题是,在某些情况下,人们可能希望在ur中使用多个参数。但是,这将意味着满足参数未定义的每个场景的排列变得有点令人生畏。 (2个参数意味着4个组合,3个意味着9个等等)这将是一个维护噩梦!
从现在开始,我的方法是采用一种方法,即我希望传递给服务器的任何信息都将通过每个请求的正文中的JSON发送。这将允许我保持一条路线。