You need to enable JavaScript to run this app. 如何在Jest中校验res.body.data数组是否为空及元素是否包含id字段
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jest中校验res.body.data数组是否为空及元素是否包含id字段

Jest 校验逻辑实现

你可以按照以下两种方式实现需求,根据你的测试场景选择即可:

方式1:单条用例兼容空/非空两种情况

适合同一条用例可能返回空或非空结果的场景:

test('校验res.body.data格式合法性', () => {
  // 第一步先校验返回值一定是数组类型
  expect(res.body.data).toBeInstanceOf(Array)

  // 数组非空时再校验每个元素的id字段
  if (res.body.data.length > 0) {
    res.body.data.forEach(item => {
      // 校验对象存在id字段,可根据需求补充id的类型校验
      expect(item).toHaveProperty('id')
      // 示例:如果要求id是数字类型,可加下一行
      // expect(typeof item.id).toBe('number')
    })
  }
})

方式2:分场景写专用用例

适合分别测试空返回、非空返回的场景,测试覆盖更清晰:

  • 空返回测试用例
test('无数据时返回空数组', async () => {
  // 模拟无数据的请求场景
  const res = await request(yourApp).get('/your/request/path')
  expect(res.body.data).toEqual([])
})
  • 非空返回测试用例
test('有数据时所有返回对象都带id字段', async () => {
  // 提前构造测试数据,保证接口有返回
  await mockDatabaseHasData()
  const res = await request(yourApp).get('/your/request/path')

  // 先确认数组非空
  expect(res.body.data.length).toBeGreaterThan(0)
  // 校验所有元素都包含id字段
  res.body.data.forEach(item => {
    expect(item).toEqual(
      expect.objectContaining({
        id: expect.any(Number) // 可替换为expect.any(String)匹配字符串类型id
      })
    )
  })
})

如果对校验精度要求不高,也可以直接把非空判断和字段校验合并成一条逻辑,即使数组为空时,forEach也不会执行,不会抛出断言错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:54:06