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

Vitest测试初始化数组时出现concat未定义读取错误求助

解决"Cannot read properties of undefined (reading 'concat')"错误

问题根源

你在测试里调用new Work()时没传任何参数,构造函数里的teams参数会是undefined,这时候this.teams = teams会把类字段初始化的空数组覆盖成undefined,后续调用teamAdded时,this.teams.concat()自然就会报错。

修复方案

有两种简单的修复方式:

方式1:给构造函数参数加默认值

修改类的构造函数,确保即使不传参数,this.teams也会被初始化为空数组:

class Work {
    teams = [];
    
    constructor(teams = []) {
        this.teams = teams
        this.teamAdded = this.teamAdded.bind(this)
    }

    teamAdded(team) {
        this.teams = this.teams.concat(team)
        return this.teams
    }
}

方式2:实例化时传入空数组

如果不想修改类代码,就在测试里实例化时传空数组:

test('team is added on submission', () => {
  var work = new Work([])
  var team = ['default team']
  expect(work.teamAdded(team)).toHaveLength(1)
})

额外的测试代码修正

你的测试代码还有两个小问题需要修正:

  • 测试回调里的async是多余的(没有用到异步操作),且语法错误,应改为() =>
  • expect的括号未闭合,原代码expect(work.teamAdded(team).toHaveLength(1)缺少一个右括号,需修正为expect(work.teamAdded(team)).toHaveLength(1)

验证逻辑说明

修复后,调用teamAdded(['default team'])时,空数组和传入的数组拼接,结果为['default team'],长度为1,完全符合你的测试预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:57:36