我正在用Node.js开发一个Web服务器,目前正在尝试通过玩笑测试覆盖所有分支。我有一个功能,登出,它接受来自req的req和res对象。我需要在if语句中进行测试。
// app.js
function logout(req, res) {
// console.log(req.session.destroy.toString());
req.session.destroy(function (err){
if (err){
console.error(err);
res.sendStatus(500);
}
console.log('Logged out');
res.redirect('/');
});
}
// app.test.js
let res = {sendStatus: jest.fn((inp) => inp)};
let req = {
session: { destroy: jest.fn((callback) => {
callback('TEST_ERROR');
})}
};
test('Test /logout error', async () => {
await logout(req, null);
expect(req.session.destroy.mock.calls.length).toEqual(1);
});
我已经搜索了类似的答案,唯一可以发现的话题是this,它使我可以进入if语句,但现在抛出错误:TypeError: Cannot read property 'sendStatus' of null
。
无论如何,我可以允许回调函数访问我在app.test.js中定义的资源吗?任何对正确方向的帮助或指导都将受到赞赏。
正如plumthedev正确指出的那样,在我的app.test.js中,当我调用loguout时,我传递的是我错过的null。一旦将其更改为res,它就解决了我的问题。
// app.test.js
test('Test /logout error', async () => {
await logout(req, res);
expect(req.session.destroy.mock.calls.length).toEqual(1);
});
答案 0 :(得分:1)
在 test()的 app.test.js 中,您将 res 参数传递为 null 。并且您收到错误TypeError: Cannot read property 'sendStatus' of null
,这通常是因为您传递了 null 。此回调是正确的,但调用错误。像传递 req 一样尝试传递 res 。
请务必阅读以下内容: 回调函数MDN(理论):https://developer.mozilla.org/en-US/docs/Glossary/Callback_function
回调函数(FelDev on Medium-实践和理论):https://medium.com/javascript-in-plain-english/callbacks-in-node-js-how-why-when-ac293f0403ca
问候,李子!
答案 1 :(得分:0)
最简单的回调示例如下:link Yu可以轻松传递一些道具:)