我正在尝试使用sinon
和sinon-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);
});
});
答案 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
的回复,因为您不应该关闭send
和sendStatus
。
答案 1 :(得分:-1)
* and -