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

使用Cypress从拦截的响应体中取值并在后续测试步骤调用

问题原因

Cypress的所有命令都是异步入队执行的,你写的cy.intercept仅完成拦截器注册,后续的cy.log(test)会在拦截请求触发、响应返回前同步执行,此时赋值test = res.body.rxId的逻辑还未运行,自然拿到的是初始值。

正确实现方案

推荐使用Cypress内置的别名(Alias)机制存储异步获取的值,不要依赖外部全局变量传递异步结果:

// 1. 注册拦截器并设置别名
cy.intercept(
    {
        url: '**/consumers/rx?extension=.jpg',
        method:"POST"
    }
).as('postRxRequest')

// 2. 这里补你触发该POST请求的业务操作,比如点击上传、提交按钮等
// 示例:cy.get('#submit-upload').click()

// 3. 等待请求完成后获取响应值,存储为别名
cy.wait('@postRxRequest').then((interception) => {
    const rxId = interception.response.body.rxId
    expect(rxId).not.to.be.null
    // 存储为别名供后续步骤使用
    cy.wrap(rxId).as('rxId')
})

// 4. 后续需要使用rxId的场景,通过别名获取即可
cy.get('@rxId').then(rxId => {
    cy.log(rxId) // 此处可正常输出获取到的rxId
    // 其他依赖rxId的测试逻辑都放在该回调内执行
})
注意事项

如果一定要用外部变量存储值,必须保证所有用到该变量的逻辑都放在cy.wait('@postRxRequest')的回调链路后执行,不能直接同步调用变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:07