TypeError模拟表达响应对象

时间:2016-12-11 04:00:41

标签: javascript unit-testing express response sinon

我正在尝试使用sinonsinon-express-mock编写测试以模拟不正确的请求,然后在我的应用程序中调用验证函数,确保验证函数返回正确的响应状态( 400)。但是,目前我收到错误TypeError: Cannot read property 'send' of undefined。我认为send会与res对象的其余部分一起被嘲笑,但如果不是,我怎么能做到这一点?提前谢谢。

我正在测试的功能:

export const validateItemRequest = (req, res) => {
    if (!req.query.number) {
        return res.status(400).send('Number not specified');
    } else if ( req.query.number % 1 !== 0) {
        return res.status(400).send('Incorrect number syntax');
    } 
};

测试代码:

describe('item', function() {

    it('should only accept valid requests', function() {

        const itemRequest = {
            query: {
                number: 'abcde',
            },
        };

        const req = mockReq(request);
        const res = mockRes();

        itemController.validateItemRequest(req, res);

    });
});

2 个答案:

答案 0 :(得分:0)

sinon-express-mock目前不支持链接。有an open issue to add chaining support,但目前这些方法无法返回对象,因此无法从res.status链接到send

我只需要为我的测试提供一些响应方法,所以我做了我自己的响应间谍:

var response = {  
  status: sinon.spy(function() { return response; }),  
  send: sinon.spy(),  
  sendStatus: sinon.spy(),
  reset: function() {
    for (var method in this) {
      if (method !== 'reset') {
        this[method].reset();
      }
    }
  }
};

注意我只返回status的回复,因为您不应该关闭sendsendStatus

答案 1 :(得分:-1)

* and -