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

Jest覆盖率报告未识别测试文件内函数的解决方法求助

解决Jest测试文件内函数覆盖率统计为0的问题

问题场景

将业务函数(sum、mul、sub、div)直接写在Jest测试文件中,测试用例全部通过,但执行npm test -- --coverage后覆盖率报告所有统计列均为0,未识别到这些函数。

代码示例:

import {describe, expect} from "@jest/globals";

function sum(a,b) {
    return a+b;
}

const div = (a,b) => {
    return a/b;
}

const mul = (a,b) => {
    return a*b;
}

const sub = (a,b) => {
    return a-b;
}

describe('testing', ()=> {
    
    it('test', ()=> {
        expect(sum(1,2)).toBe(3);
    });

    it('test2', ()=> {
        expect(mul(2,2)).toBe(4);
    });
});

原因分析

Jest默认会将测试文件(命名通常匹配*.test.js、*.spec.js等规则)排除在覆盖率统计范围之外,工具默认认为测试文件本身不属于需要统计覆盖率的业务代码,因此即使文件内包含业务函数,也不会被纳入计算。

解决方法

方法1:修改Jest配置,将目标测试文件纳入统计范围

在项目的jest.config.js(无则新建)中调整collectCoverageFrom或coveragePathIgnorePatterns配置,明确指定要统计的测试文件:

示例配置1:使用collectCoverageFrom

module.exports = {
  collectCoverageFrom: [
    "**/*.{js,jsx}", // 包含所有JS/JSX文件
    "!**/node_modules/**", // 排除node_modules
    "!**/*.test.js", // 先排除所有常规测试文件
    "**/your-test-file-name.test.js" // 单独包含目标测试文件
  ]
};

示例配置2:修改coveragePathIgnorePatterns

module.exports = {
  coveragePathIgnorePatterns: [
    "/node_modules/",
    // 移除默认对测试文件的忽略规则,仅排除不需要统计的测试文件
    "!**/your-test-file-name.test.js"
  ]
};

方法2:命令行临时指定统计文件

如果仅需单次统计,可直接在命令行中通过--collectCoverageFrom参数指定目标文件:

npm test -- --coverage --collectCoverageFrom="**/your-test-file-name.test.js"

方法3:导出函数并自行导入测试

将测试文件内的业务函数导出,再从当前文件导入后执行测试,配合配置调整可确保覆盖率工具捕捉到函数调用:

修改后的代码示例:

import {describe, expect} from "@jest/globals";

// 导出业务函数
export function sum(a,b) {
    return a+b;
}

export const div = (a,b) => {
    return a/b;
}

export const mul = (a,b) => {
    return a*b;
}

export const sub = (a,b) => {
    return a-b;
}

// 从当前文件导入函数
import * as math from './your-test-file-name.test.js';

describe('testing', ()=> {
    
    it('test sum', ()=> {
        expect(math.sum(1,2)).toBe(3);
    });

    it('test mul', ()=> {
        expect(math.mul(2,2)).toBe(4);
    });

    it('test sub', ()=> {
        expect(math.sub(5,3)).toBe(2);
    });

    it('test div', ()=> {
        expect(math.div(4,2)).toBe(2);
    });
});

注意事项

  • 使用方法3时,需确保当前文件的导入路径与项目结构匹配。
  • 调整配置后,建议执行jest --clearCache清除Jest缓存,再重新生成覆盖率报告,避免缓存影响结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:20:52