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

如何使用Jest匹配器验证含动态文件名的函数调用参数

解决Jest中匹配含动态日期的调用参数问题

方案一:用嵌套匹配器直接验证

Jest的toHaveBeenCalledWith支持搭配各种匹配器,不用硬匹配整个对象。针对你的场景,嵌套使用expect.objectContaining、expect.arrayContaining和expect.stringContaining就能精准检查文件名前缀,完全不用管后面的动态日期:

// 调用process函数后执行验证
expect(process).toHaveBeenCalledWith(
  expect.objectContaining({
    documents: expect.arrayContaining([
      expect.objectContaining({
        filename: expect.stringContaining('doc1'),
        content: 'text1'
      }),
      expect.objectContaining({
        filename: expect.stringContaining('doc2'),
        content: 'text2'
      })
    ])
  })
);
  • expect.stringContaining('doc1'):只校验文件名包含doc1前缀,忽略后续日期部分
  • expect.arrayContaining:确保documents数组里存在符合条件的元素
  • expect.objectContaining:只要对象包含指定属性即可,无需完全匹配整个结构

方案二:提取调用参数后手动校验

如果觉得嵌套匹配器看着繁琐,也可以直接取出process的调用记录,自己遍历做校验:

// 获取process的所有调用参数
const processCalls = process.mock.calls;

// 遍历每一次调用的参数
processCalls.forEach(args => {
  const hasDoc1 = args[0].documents.some(doc => 
    doc.filename.includes('doc1') && doc.content === 'text1'
  );
  const hasDoc2 = args[0].documents.some(doc => 
    doc.filename.includes('doc2') && doc.content === 'text2'
  );
  expect(hasDoc1 && hasDoc2).toBe(true);
});

这种方式灵活性更高,适合需要添加额外自定义校验逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:40:21