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

Cypress写在if条件内的Chai断言早于cy.wait执行问题咨询

问题根因

你遇到的执行顺序问题完全是Cypress的异步队列特性导致的:

  • 所有cy.*开头的Cypress命令都是异步的,执行时只会被加入全局命令队列排队,不会立刻执行
  • 你写在.then()回调中的console.log、expect断言都属于普通同步JS代码,会在当前JS上下文立即执行,不会等待队列中的cy.wait命令运行

这就导致你看到的现象:console.log和断言先跑完,队列里的30秒等待后才执行,完全不符合预期的执行顺序。

修复方案

方案1:将断言放入cy.wait的回调中

把断言逻辑放到cy.wait()的.then()回调内,即可保证断言在30秒等待结束后才执行:

cy.getReportJson('84b636f4-c8f0-4aa4-bdeb-15abf811d432',user).then(report=> {
    if(services.request_criminal_record_check.include){
        console.log('inside if')
        cy.wait(30000).then(() => {
            expect(report.report_summary.rcmp_result.status).equal(data.expected_result.rcmp_result.status)
            expect(report.report_summary.rcmp_result.overall_score).equal(data.expected_result.rcmp_result.overall_score)
            expect(report.report_summary.rcmp_result.result).equal(data.expected_result.rcmp_result.result)
        })
    }
})

方案2(更推荐):用轮询替代硬等待

固定30秒硬等待的稳定性差,服务器性能好的时候会浪费时间,服务器性能差的时候30秒不够仍会断言失败。可以实现简单的轮询逻辑,主动检查报告生成状态,生成完成后立刻执行断言:

// 轮询获取报告,最多重试30次,每次间隔1秒,总最大等待时长30秒
function pollReport(reportId, user, retry = 0) {
  return cy.getReportJson(reportId, user).then(report => {
    // 自定义报告生成完成的判断条件,可根据实际业务调整
    const isReady = report.report_summary?.rcmp_result?.status !== 'pending'
    if (isReady || retry >= 30) return report
    cy.wait(1000)
    return pollReport(reportId, user, retry + 1)
  })
}

// 调用轮询方法获取最终生成完成的报告再做断言
pollReport('84b636f4-c8f0-4aa4-bdeb-15abf811d432', user).then(report => {
  if(services.request_criminal_record_check.include){
    expect(report.report_summary.rcmp_result.status).equal(data.expected_result.rcmp_result.status)
    expect(report.report_summary.rcmp_result.overall_score).equal(data.expected_result.rcmp_result.overall_score)
    expect(report.report_summary.rcmp_result.result).equal(data.expected_result.rcmp_result.result)
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:54:04