You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jest测试Vue组件ErrandsListTable渲染失败报TypeError错误求助

解决Jest测试Vue组件时的TypeError: Cannot read property 'length' of null问题

这个报错的核心原因非常清晰:你的ErrandsListTable组件中,errands这个prop的默认值被设置成了null,但组件的模板和方法里都直接把它当作数组来使用(比如访问errands.length、传给_.orderBy处理)。当测试时没有传入errands数据,就会使用这个默认的null值,导致读取length属性时抛出错误。

下面是几种可行的解决办法,你可以根据需求选择:

1. 修正errands prop的默认值(推荐)

既然errands的类型定义是Array,那么它的默认值应该是空数组而不是null,这样组件在没有收到外部传入数据时,也能安全地处理数组相关操作。修改组件props中的errands定义:

errands: { 
  type: Array, 
  default: () => { return []; } // 把null改成空数组
}

2. 测试时传入mock的errands数据

如果你暂时不想修改组件代码,可以在测试挂载组件时,通过propsData传入一个空数组或者模拟的 errands 数据:

beforeEach(() => {
  wrapper = shallowMount(ErrandsListTable, {
    propsData: {
      errands: [] // 传入空数组避免null报错
    }
  });
});

3. 在组件中增加空值防护

为了让组件更健壮,即使errands意外为null也不会崩溃,可以在模板和方法里添加空值判断:

  • 模板中使用可选链操作符:把errands.length改成errands?.length
  • 在sliceArray方法里先判断数组是否存在:
sliceArray: function(array) {
  if (!array) return []; // 空值时返回空数组
  let val = _.orderBy(array, "orderDate", "desc");
  return val.slice(0, this.numberOfErrandsLoaded);
}

这三种方法都能解决你当前测试中组件无法正常渲染的问题,其中第一种是最符合Vue prop类型规范的做法。

内容的提问来源于stack exchange,提问作者erikos93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:04:11