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

Sequelize Mock搭配Sequelize的count函数使用无法正常工作如何解决?

结论

你的猜测完全正确,该问题就是因为Sequelize Mock无法模拟sequelize.fn('count')的聚合计算逻辑导致的。

问题原因

Sequelize Mock的设计定位是返回人工预设的模拟数据,本身不会解析、执行Sequelize内置的函数逻辑,也不会真的根据查询参数做聚合运算。你代码中通过fn定义的count聚合字段,在未手动配置返回值的情况下,Sequelize Mock返回的结果中该字段值为undefined,parseInt(undefined, 10)的执行结果就是NaN,最终导致你解构得到的active、in-progress值都是NaN。

修复方案

  • 直接给对应模型的findAll方法预设返回结果即可解决,示例如下:
// 在执行查询前先配置模拟返回数据
ImmediateCare.$queueResult([
  { status: 'active', count: '5' }, // 可以直接传数字也可以传字符串格式的数值
  { status: 'in-progress', count: '3' }
])

// 再执行你的原有查询逻辑,就能拿到预期的count值
const {
    active,
    'in-progress': inProgress,
  } = await ImmediateCare.findAll({
    raw: true,
    attributes: ['status', [fn('count', col('id')), 'count']],
    group: ['ImmediateCare.status'],
  }).then((status) => {
    const counts = {
      active: 0,
      'in-progress': 0,
    }

    status.forEach((s) => {
      counts[s.status] = parseInt(s.count, 10)
    })

    return counts
  })
  • 如果不需要测试查询逻辑本身,也可以直接构造符合格式的counts对象传入后续业务逻辑做测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:54:04