Jest测试报TypeError:无法读取undefined的'[object Array]'属性
TypeError: Cannot read property '[object Array]' of undefined in Jest Test for Slot Filter Function
哈哈,这个问题其实一眼就能揪出来——你在测试里给函数传参的方式搞错啦!
咱们先看你的业务函数定义:
export default function filterAvailableSlots(allSlots, bookedSlots) { let availableSlots = []; availableSlots = allSlots.filter((item) => !bookedSlots[item]); return availableSlots; }
它明确接受两个独立参数:第一个是时间数组allSlots,第二个是已预订时段的对象bookedSlots。
但你在测试里是这么传参的:
const availableSlots = filterAvailableSlots([allSlots, bookedSlots]);
你把两个参数打包成了一个数组传进去!这就导致函数内部的变量完全乱了:
allSlots变成了你传入的那个数组:[['9:30', '10:00', ...], {'10:30': true, ...}]bookedSlots因为没收到第二个参数,直接变成了undefined
当执行allSlots.filter((item) => !bookedSlots[item])时,item此时是数组里的第一个元素(也就是原allSlots数组),转成字符串就是[object Array],而bookedSlots是undefined,你试图访问undefined的[object Array]属性,自然就抛出了那个错误。
修复方法
把测试里的传参改成直接传递两个独立参数就行:
const availableSlots = filterAvailableSlots(allSlots, bookedSlots);
这样函数就能正确接收两个参数,执行过滤逻辑,你的测试也能顺利通过啦——毕竟你说控制台已经能输出正确结果,说明业务函数本身的逻辑是没问题的,只是测试传参的小失误~
内容的提问来源于stack exchange,提问作者nabramow
相关产品推荐
相关产品推荐

