2016-12-11 4 views
1

В настоящее время я пытаюсь написать тест с использованием sinon и sinon-express-mock, чтобы высмеять неверный запрос, а затем вызывать функцию проверки в моем приложении, гарантируя, что функция проверки вернет правильный статус ответа (400). Однако, в настоящее время я получаю ошибку TypeError: Cannot read property 'send' of undefined. Я думал, что send будет издеваться над остальной частью объекта res, но если нет, то как я могу это сделать? Заранее спасибо.TypeError mocking express response object

Функция Я проверяю:

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); 

    }); 
}); 
+0

req.query.number% 1, когда модуль когда-либо не 0? – Bindrid

+0

@Bindrid, когда число имеет десятичное место – user3802348

+0

достаточно хорошо, lol – Bindrid

ответ

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, так как вы не должны цепей от send и sendStatus.

-1
response = { 
    json:(obj) => { response.body = obj }, 
    status:function(status) { 
    response.statusValue = status; 
    return this; 
} 
Смежные вопросы