无法设置未定义的属性,尽管属性已声明Typescript

kmynzznz  于 2023-01-03  发布在  TypeScript
关注(0)|答案(2)|浏览(180)

我正在使用Typescript进行Cypress测试。
这是我的职责

createOrder: (body) => {
    let order: { id: any }

    cy.request({
        method: 'POST',
        url: '/order',
        body: body
    }).then(response => {
        let res = response.body.Order

        order.id = res.id
    })

    return order
},

执行时,我收到错误:第一个月
我在这里遗漏了什么?我似乎已经声明了id

q43xntqr

q43xntqr1#

let order: { id: any }order定义了一个类型,但没有给予它赋值。
尝试用let order: {id: any} = {id: ""}初始化它,避免使用any(使用any会禁用变量/属性的类型检查,并使您陷入此类问题)

4nkexdtk

4nkexdtk2#

除了主要问题之外,请注意您的方法永远不会从响应返回值。
POST请求是异步的,但是方法的返回是同步的,它总是返回原始的空值。
要解决这个问题,您必须返回请求本身以及.then()回调中的id

createOrder: (body): Chainable<{ id: string }> => {

  order: {id: string} = {id: ''}

  return cy.request({              // returns the result of the request
    method: 'POST',
    url: '/order',
    body: body
  }).then(response => {
    const res = response.body.Order
    order.id = res.id
    return order              // returns order as the modified response  
  })
}

一旦代码中有了异步部分,它之后的所有内容也必须异步处理,因此这就是您使用方法的方式

it('tests with createOrder', () => {
  ...
  myPageObject.createOrder(body).then(order => {
    ...
  })
})

相关问题