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

如何使用Jest编写单元测试覆盖JavaScript函数的Try Catch异常分支(解决代码覆盖率未达标问题)

解决Jest测试中Catch块未覆盖的问题

要覆盖createJobTrasferSetPayloadOutput函数的catch分支,我们只需要模拟fs.promises.writeFile抛出错误,让代码进入异常处理逻辑即可。下面是具体的实现步骤和完整测试代码:

步骤说明

  • 使用Jest的mockRejectedValue方法,让mock的writeFile返回一个被拒绝的Promise(模拟文件写入失败的场景)。
  • 新增一个独立的测试用例,专门验证异常分支的行为:断言函数返回的是预期的错误,同时确认writeFile确实被调用过。

完整的测试代码

const empJobTransferSrvc = require('../../../libs/employeeJobTransferSet/employeeJobTransferServiceLive'); 
const fs = require('fs');

jest.mock('fs', () => ({ 
  promises: { 
    writeFile: jest.fn(), 
  }, 
})); 

// 定义测试用的payload数据
const jobTransferSetPayload = [{ id: 1, position: 'Developer' }];

describe('createJobTrasferSetPayloadOutput', () => { 
  afterEach(() => { 
    jest.resetModules(); 
    jest.clearAllMocks(); 
  }); 

  it('should create and write to the file successfully', async () => { 
    const result = await empJobTransferSrvc.createJobTrasferSetPayloadOutput(jobTransferSetPayload); 
    expect(JSON.parse(result)[0]).toEqual(jobTransferSetPayload[0]); 
    expect(result).not.toBeNull();
    // 额外断言:确认writeFile被调用时的参数正确
    expect(fs.promises.writeFile).toHaveBeenCalledWith(
      './output/jobTransferSetPayload.json',
      JSON.stringify(jobTransferSetPayload, null, 4),
      { overwrite: false }
    );
  }); 

  it('should return error when file write fails', async () => { 
    // 模拟writeFile抛出错误
    const testError = new Error('Failed to write file');
    fs.promises.writeFile.mockRejectedValue(testError);

    const result = await empJobTransferSrvc.createJobTrasferSetPayloadOutput(jobTransferSetPayload); 
    // 断言返回的是我们模拟的错误
    expect(result).toEqual(testError);
    // 确认writeFile确实被调用了
    expect(fs.promises.writeFile).toHaveBeenCalled();
  }); 
});

关键细节

  • 我们给测试套件重命名为更贴合函数名的createJobTrasferSetPayloadOutput,比原来的命名更清晰。
  • 在成功分支的测试里新增了对writeFile调用参数的断言,让测试逻辑更健壮。
  • 异常分支测试中,通过mockRejectedValue模拟写入失败,然后验证函数返回的错误是否符合预期。

这样修改后,你的代码覆盖率应该就能达标了,catch块里的return err;语句会被执行到。

内容的提问来源于stack exchange,提问作者R.Almoued

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:44:05