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

Jest mock未覆盖预期代码,如何覆盖submitCampaignForm的onSuccess逻辑

你当前的mock逻辑和实际函数执行逻辑不符:
你源码中submitCampaignForm的逻辑是向mutate传入第二个参数(包含你写的onSuccess回调的配置对象),而你的现有mock是让mutate返回一个带onSuccess的对象,两者完全不匹配。你源码里的onSuccess回调从未被触发,所以不会被覆盖率统计到。

修改方案

你需要先拿到mutate被调用时接收到的onSuccess回调,手动触发它来覆盖内部逻辑,建议补充两个测试用例覆盖if判断的两个分支:

// 用例1:onSuccess接收的数据带id,验证setCamapignId被正确调用
it('should call setCamapignId when onSuccess get data with id', () => {
  const mockId = 'test-campaign-id';
  const mutateSpy = jest.fn();
  const updateSpy = jest.fn();
  // 调用目标函数
  submitCampaignForm(request, mutateSpy, updateSpy);
  // 验证mutate被调用
  expect(mutateSpy).toHaveBeenCalled();
  // 拿到传给mutate的第二个参数里的onSuccess回调
  const { onSuccess } = mutateSpy.mock.calls[0][1];
  // 手动触发onSuccess,传入带id的返回值
  onSuccess({ id: mockId });
  // 验证setCamapignId被正确调用
  expect(updateSpy).toHaveBeenCalledWith(mockId);
});

// 用例2:onSuccess接收的数据不带id,验证setCamapignId不会被调用
it('should not call setCamapignId when onSuccess get data without id', () => {
  const mutateSpy = jest.fn();
  const updateSpy = jest.fn();
  submitCampaignForm(request, mutateSpy, updateSpy);
  const { onSuccess } = mutateSpy.mock.calls[0][1];
  // 传入不带id的返回值
  onSuccess({});
  expect(updateSpy).not.toHaveBeenCalled();
});
补充说明

你源码里的参数拼写setCamapignId存在笔误,正确拼写应为setCampaignId,建议后续统一修正避免调用出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:03