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

Cypress报错TypeError: Cannot read properties of undefined (reading 'then')排查

问题原因及解决方案

你的代码报错Cannot read properties of undefined (reading 'then')的核心原因是:checkStatusCode函数没有返回Cypress的异步命令链。

具体分析

Cypress的所有命令都是异步的,cy.request()返回的是一个支持链式调用的类Promise对象。但你当前的checkStatusCode函数里,只是执行了cy.request(),却没有把这个对象返回出去。内部.then()里的return true仅仅是给cy.request()的回调函数返回值,并不会让整个checkStatusCode函数返回这个可链式调用的命令链,所以函数最终返回的是undefined,调用.then()自然会报错。

另外还有个隐藏问题:你用expect(response.status).to.eq(200)做断言,一旦状态码不是200,断言会直接失败并终止测试,根本走不到navigatetoHomepage里的else分支。

修正方案

方案1:返回命令链并保留断言(仅在状态码为200时继续执行)

如果只需要在状态码为200时访问页面,断言失败就终止测试,可以修改checkStatusCode让它返回整个命令链:

checkStatusCode(href) {
  // 返回cy.request的链式调用,让外部能继续.then()
  return cy.request({
    url: href,
    failOnStatusCode: false,
  }).then((response) => {
    expect(response.status).to.eq(200);
    return true;
  });
}

方案2:返回布尔值,兼容状态码非200的情况

如果需要在状态码不是200时执行cy.log("Fail"),建议去掉断言,直接返回状态码的判断结果:

checkStatusCode(href) {
  return cy.request({
    url: href,
    failOnStatusCode: false,
  }).then((response) => {
    // 直接返回布尔值,不管成功失败都能让外部拿到结果
    return response.status === 200;
  });
}

这样修改后,navigatetoHomepage里的.then()就能正常拿到返回值,根据结果决定是否访问URL或打印日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:12:12