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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:35:11