jest fs 写自定义 collectCoverageFrom 指定文件 检查测试覆盖率上

const fs = require('fs');
const path = require('path');
//读取指定文件夹下的全部文件,可通过正则进行过滤,返回文件路径数组
function readAllFile(root, reg, aaa) {
    var resultArr = [];
    if (fs.existsSync(root)) {
        var stat = fs.lstatSync(root);
        if (stat.isDirectory()) {
            var files = fs.readdirSync(root);
            files.forEach(function (file) {
                var t = readAllFile(root + '/' + file, reg);
                resultArr = resultArr.concat(t);
            });
        } else {
            if (reg !== undefined) {
                if (typeof reg.test == 'function'
                    && reg.test(root)) {
                    resultArr.push(root);
                }
            } else {
                resultArr.push(root);
            }
        }
    }
    return resultArr;
}
//获取除去node_modules 后的文件路径数组
//filePath 如果是正则 就匹配正则 是路径 就匹配路径
const readAllFileList = (fileList, testReg) => {
    if (fileList.length) {
        const result = fileList.reduce((target, file) => {
            const { filePath, ExtensionName } = file;
            let files = [];
            if (filePath instanceof RegExp == false && typeof filePath !== 'string') {
                console.log('filePath属性只能是:string || RegExp')
                return false;
            } else if (filePath instanceof RegExp) {
                const noNodeModulesFiles = readAllFile(path.resolve(__dirname, '../'), /^((?!node_modules).)*$/);
                files = noNodeModulesFiles
                    .filter(noNodeModuleFile => filePath.test(noNodeModuleFile))
                    .filter(file => testReg.test(file));
            } else {
                files = readAllFile(path.resolve(__dirname, filePath), testReg)
            }
            const collectList = files.map(path => path.split('creams-main/')[1].split('/__tests')[0] + ExtensionName)
            target = target.concat(collectList);
            return target;
        },[])
        return result;
    } else {
        const noNodeModulesFiles = readAllFile(path.resolve(__dirname, '../'), /^((?!node_modules).)*$/);
        return noNodeModulesFiles
                .filter(file => testReg.test(file))
                .map(path => path.split('creams-main/')[1].split('/__tests')[0] + '/**/*.{ts,tsx}');
    }
}
module.exports = readAllFileList;
//获取自定义 指定检查所有需要测试的文件  不配置是默认
const fileList = []
var testReg = /__tests__/;
const collectCoverageFrom = [...new Set(readAllFileList(fileList, testReg))];

 

猜你喜欢

转载自blog.csdn.net/weixin_40222803/article/details/85261000