我正忙于为我编写的现有 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
,否则端点不存在。这个对吗?
我错过了什么?