使用mocha测试Node.js api

时间:2016-01-27 21:09:21

标签: node.js api mocha expect.js

我正忙着为我写的现有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,否则端点不存在。这是对的吗?

我错过了什么?

2 个答案:

答案 0 :(得分:0)

根据mocha documentation,必须始终调用完成的回调,如果出现错误。实际上它接受错误。 所以我认为你必须用以下代码重写你的代码:

$cats = get_the_category( $post->ID );

答案 1 :(得分:0)

所以我做了一些调查,并就此问题提出了另一个问题here

最后问题是我没有完全理解快递框架。基本上我在我的问题的更新2中提到的是我需要遵循的路由并指定一个不需要参数的路由,但返回我在这种情况下预期的错误消息。

我对这种方法的问题是,在某些情况下,人们可能希望在ur中使用多个参数。但是,这将意味着满足参数未定义的每个场景的排列变得有点令人生畏。 (2个参数意味着4个组合,3个意味着9个等等)这将是一个维护噩梦!

从现在开始,我的方法是采用一种方法,即我希望传递给服务器的任何信息都将通过每个请求的正文中的JSON发送。这将允许我保持一条路线。