开玩笑-TypeError:无法读取未定义的属性“ [对象数组]”

时间:2020-03-30 09:05:43

标签: javascript arrays jestjs javascript-objects

我开玩笑地编写了单元测试,并且在运行它时看到此错误。我在控制台中获取了正确的数据。我已经看过与我类似的这些帖子,但仍然不明白为什么会发生:

这是我的测试

import filterAvailableSlots from './filterAvailableSlots';

/* UNIT TEST */

describe('filterAvailableSlots', () => {
  it('should return an array', async () => {
    const bookedSlots = { '10:30': true, '11:00': true };
    const allSlots = ['9:30', '10:00', '10:30', '11:00', '11:30', '12:00'];
    const availableSlots = filterAvailableSlots([allSlots, bookedSlots]);
    expect(Array.isArray(availableSlots)).toBe(true);
  });
});

这是我的代码:

/**
 * @param {Array} allSlots
 * @param {Object} bookedSlots
 * @return an array of available slots
 */

export default function filterAvailableSlots(allSlots, bookedSlots) {
  let availableSlots = [];
  availableSlots = allSlots.filter((item) => !bookedSlots[item]);
  return availableSlots;
}

应该过滤一系列时间,并删除与bookedSlots对象键匹配的所有项目。

具有更多错误详细信息的图片:

doesn't like my reference to the object property

正确的返回值,我可以通过console.log正确看到它:

[ '9:30', '10:00', '11:30', '12:00' ] 

必须是我不了解的Java语言怪癖。任何人都知道即使我在控制台中看到了正确的数据,为什么测试仍失败了?

1 个答案:

答案 0 :(得分:0)

更改

const availableSlots = filterAvailableSlots([allSlots, bookedSlots]);

const availableSlots = filterAvailableSlots(allSlots, bookedSlots);

此外,函数中的初始let语句没有执行任何操作。我会这样写:

export default function filterAvailableSlots(allSlots, bookedSlots) {
  return allSlots.filter((item) => !bookedSlots[item]);
}