Sinon stub实践:mock返回对象数组的函数解决解构赋值报错
报错根因
你当前给fakeRows.rows定义的是Sinon stub函数,需要主动调用rows()才会返回目标数组,但业务代码中是直接读取results.rows[0],将rows作为普通数组使用,不会触发stub调用,因此results.rows[0]读取结果为undefined,触发属性解构报错。
修正方案
1. 调整fakeRows定义
直接将rows字段赋值为目标数组即可,无需封装为stub函数:
const rowData = { count: 1, timestamp: '' }; // 此处rows直接赋值数组,和业务代码的读取逻辑对齐 const fakeRows = { rows: [rowData] };
同时注意变量声明顺序,需先定义fakeRows再将其传入client.query的resolves配置中:
const fakeClient = { query: sinon.stub().resolves(fakeRows) };
2. 补充关联逻辑打桩校验
若需验证参数调用逻辑,可同步完善query.toParam()的打桩定义,确保参数传递符合预期:
// 示例:如果query是其他模块导出的对象,可按如下方式打桩 const query = { toParam: sinon.stub().returns({ // 填充你实际的查询参数结构 }) };
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

