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
相关产品推荐
相关产品推荐

