TypeScript中已声明属性仍报Cannot set properties of undefined错误排查
问题分析与解决
核心问题1:变量未初始化
你只声明了order的类型{ id: any },但没有创建具体的对象实例,此时order的值是undefined,自然无法给undefined的id属性赋值,这就是报错Cannot set properties of undefined (setting 'id')的直接原因。
核心问题2:Cypress异步操作的特性
cy.request是异步执行的,你的函数直接在请求外部return order,这时候请求还没完成,就算初始化了order,返回的也是未被赋值的空对象,后续使用这个返回值同样会出问题。
修正后的代码
createOrder: (body) => { // 初始化符合类型的对象,避免undefined let order: { id: any } = { id: null } // 利用Cypress命令链,确保赋值操作在请求完成后执行 return cy.request({ method: 'POST', url: '/order', body: body }).then(response => { const res = response.body.Order order.id = res.id return order // 返回赋值后的对象,供后续测试步骤使用 }) },
更简洁的写法(直接返回处理后的结果):
createOrder: (body) => { return cy.request({ method: 'POST', url: '/order', body: body }).then(response => { const res = response.body.Order return { id: res.id } // 直接返回符合类型的对象 }) },
使用时要遵循Cypress异步规则,比如:
createOrder(yourRequestBody).then(order => { // 在这里使用order.id,确保已经拿到请求返回的有效值 cy.log('订单ID:', order.id) })
内容的提问来源于stack exchange,提问作者KiritoLyn
相关产品推荐
相关产品推荐

