我开玩笑地编写了单元测试,并且在运行它时看到此错误。我在控制台中获取了正确的数据。我已经看过与我类似的这些帖子,但仍然不明白为什么会发生:
这是我的测试
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语言怪癖。任何人都知道即使我在控制台中看到了正确的数据,为什么测试仍失败了?
答案 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]);
}