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

如何在Cypress中动态断言数组元素?价格递增场景接口返回校验问题

Cypress 动态校验递增报价实现方案

改造核心思路

  • 先通过前置请求/本地变量存储上一次报价的历史值作为校验基准
  • 正确接收接口响应后,先校验通用返回字段正确性,再做递增的动态断言
  • 如果需要校验返回的历史报价数组整体合规,可以遍历数组校验元素依次递增

你提供的待断言内容截图:
需要断言的内容截图

修正后可运行的完整代码

// 可以在外部定义变量存储上一次的报价,也可以替换为查询接口拉取历史最新报价
let lastBid = 0
// 前置拉取历史最新报价的逻辑,可按需调整
cy.request('GET', '你的历史报价查询接口地址').then(res => {
  lastBid = res.body.bidHistory.slice(-1)[0].amount
})

describe('POST method', () => {
  it('suggest a price', () => {
    // 本次提交的报价,按业务规则设置递增值即可
    const currentBid = lastBid + 100
    cy.request({
      method: 'POST',
      url:"xxxxxx",
      headers:{
        "Authorization":"LOOL",
        "content-type": "application/json"
      },
      body: {
        "id": "d42f516a867590633dd8a82cb2563437",
        "bid": currentBid,
        "auctionPlatformId": "xxx",
        "auctionPlatformUserId": 0
      },
      failOnStatusCode: false
    }).then(res => {
      // 基础字段正确性校验
      expect(res.status).to.eq(200)
      expect(res.body).to.have.property("id", "d42f516a867590633dd8a82cb2563437")
      // 动态校验本次报价大于上一次报价
      expect(res.body).to.have.property("amount").to.gt(lastBid)
      expect(res.body).to.have.property("auctionPlatformId", "xxx")
      expect(res.body).to.have.property("auctionPlatformUserId", 0)

      // 如果接口返回完整历史报价数组,遍历校验所有报价依次递增
      if(res.body.bidHistory) {
        res.body.bidHistory.reduce((prev, curr) => {
          expect(curr.amount).to.gte(prev.amount, `报价${curr.amount}必须大于等于上一次报价${prev.amount}`)
          return curr
        })
      }
    })
  })
})

注意事项

  • 断言方法gt代表大于,gte代表大于等于,可根据业务规则自行替换
  • 多轮连续提交报价的场景,可以把提交逻辑封装为公共函数,每次执行完更新lastBid的值即可
  • 已修正原脚本中重复断言auctionPlatformId的笔误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:15:03