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

Cypress校验用户表格角色、状态、最近活跃列数据正确性

Cypress用户列表表格全字段断言实现方案

字段映射规则

先明确单元格索引(从2到6)和接口字段的对应计算逻辑,直接构造断言预期值:

  • 索引2(姓名列):直接取接口返回的用户name字段
  • 索引3(邮箱列):直接取接口返回的用户email字段
  • 索引4(角色列):遍历用户roles_without_context数组,提取所有项的name字段,按前端展示规则拼接(单角色直接取值,多角色用逗号加空格分隔)
  • 索引5(状态列):优先判断is_invited字段,值为true时预期为Pending;非邀请状态下,存在有效current_sign_in_at值时预期为Active,无有效最近登录记录时预期为Inactive
  • 索引6(最近活跃列):基于接口返回的current_sign_in_at时间戳,按前端统一的相对时间规则转换为x minutes ago/x hours ago/x days ago/x months ago格式

改造后可直接运行的测试代码

// 相对时间转换工具,规则必须和前端实现完全对齐
const formatRelativeTime = (timestamp) => {
  if (!timestamp) return 'Never'
  const now = Date.now()
  const timeDiff = now - new Date(timestamp).getTime()
  const UNIT_MINUTE = 60 * 1000
  const UNIT_HOUR = 60 * UNIT_MINUTE
  const UNIT_DAY = 24 * UNIT_HOUR
  const UNIT_MONTH = 30 * UNIT_DAY

  if (timeDiff < UNIT_MINUTE) return 'just now'
  if (timeDiff < UNIT_HOUR) return `${Math.floor(timeDiff / UNIT_MINUTE)} minutes ago`
  if (timeDiff < UNIT_DAY) return `${Math.floor(timeDiff / UNIT_HOUR)} hours ago`
  if (timeDiff < UNIT_MONTH) return `${Math.floor(timeDiff / UNIT_DAY)} days ago`
  return `${Math.floor(timeDiff / UNIT_MONTH)} months ago`
}

cy.wait("@getUsers")
  .its("response.body.user")
  .then(users => {
    users.forEach(currentUser => {
      // 预计算当前用户所有待校验列的预期值,规避循环闭包问题
      const columnExpected = {
        2: currentUser.name.trim(),
        3: currentUser.email.trim(),
        4: currentUser.roles_without_context.map(roleItem => roleItem.name.trim()).join(', '),
        5: (() => {
          if (currentUser.is_invited) return 'Pending'
          return currentUser.current_sign_in_at ? 'Active' : 'Inactive'
        })(),
        6: formatRelativeTime(currentUser.current_sign_in_at).trim()
      }

      // 逐单元格校验
      for (let colIndex = 2; colIndex <= 6; colIndex++) {
        cy.get(`.user_${currentUser.id} > :nth-child(${colIndex})`)
          .invoke("text")
          .then(cellText => {
            // 统一去除前后空白字符,避免前端排版空格导致断言误报
            expect(cellText.trim()).to.equal(columnExpected[colIndex])
          })
      }
    })
  })

落地注意事项

  • 所有文本取值统一做.trim()处理,过滤HTML缩进、换行产生的多余空白字符
  • 相对时间转换规则必须和前端逻辑完全对齐,包括时间单位换算(比如月是否按30天计算)、取整规则、临界值展示文案,避免时间类断言偶发失败
  • 若业务存在多角色场景,提前确认前端角色拼接的分隔符,对应调整角色字段的join参数
  • 若状态判断存在额外业务规则(比如is_managed_externally字段影响状态展示),直接修改columnExpected[5]的计算逻辑即可
  • 若最近活跃列存在“Never”这类无登录记录的展示,直接在时间转换函数中匹配对应逻辑

内容的提问来源于stack exchange,提问作者Ali Unsal Albaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:21:10