ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Recharts 怎么跑变异测试?test-mutation 的耗时控制与单文件运行

Recharts 怎么跑变异测试?test-mutation 的耗时控制与单文件运行 Recharts 怎么跑变异测试test-mutation 的耗时控制与单文件运行【免费下载链接】rechartsRedefined chart library built with React and D3项目地址: https://gitcode.com/GitHub_Trending/re/rechartsRecharts 仓库内置了基于 Stryker 的变异测试mutation testing但官方文档反复强调全量变异测试可能运行数小时。如果你在本地改动了某个模块的代码想用变异测试验证测试用例的变异杀伤能力就需要知道怎么把范围缩小到单个文件或单个目录、大概要等多久、以及结果去哪里看。本文基于仓库中的 DEVELOPING.md、CONTRIBUTING.md、stryker.config.mjs 和 vitest.config-mutation.mts 整理出一条可照做的操作路径。准备安装依赖即可无需额外搭建变异测试不需要 Docker 或构建产物走的是普通 Node 环境。按照 DEVELOPING.md 的环境准备流程git clone https://github.com/recharts/recharts.git cd recharts npm installNode 版本以仓库中的.nvmrc文件为准。Windows 用户如果npm install因codecov/bundle-analyzer只支持 Linux/Darwin 而失败用npm install --force继续即可。控制耗时的关键先收窄mutate范围耗时问题出在变异测试的扫描范围上。仓库中 stryker.config.mjs 当前的mutate配置只包含一个文件mutate: [src/theme/useBackwardsCompatibleTheme.ts],DEVELOPING.md 给出的耗时参考全量变异测试「may take several hours」可能耗时数小时先把mutate属性设置为某个具体的文件或目录后再跑「That may take 5-10 minutes」约 5–10 分钟CONTRIBUTING.md 的说法是「A single file will take 15 minutes or more」——单文件至少 15 分钟起。两处对单文件耗时的估计不一致5–10 分钟 vs 15 分钟起实际耗时取决于该文件被多少测试用例覆盖以及机器性能按「以小时计的量级」预留时间更稳妥。所以操作顺序是先编辑 stryker.config.mjs把mutate改成你要测的文件或目录再执行命令npm run test-mutation该脚本在 package.json 中定义等价于stryker run。Stryker 会读取stryker.config.mjs其中关键项testRunner: vitest并指定vitest: { configFile: vitest.config-mutation.mts }——变异测试专用测试配置与日常npm run test用的是不同的 vitest 配置文件coverageAnalysis: perTestcheckers: [typescript]即每个变异体都会经过 TypeScript 类型检查typescriptChecker开启了prioritizePerformanceOverAccuracy: truereporters: [html, clear-text, progress, json]。如果你只是想快速缩小范围、跳过类型检查这一层开销package.json 里还有一个现成脚本npm run test-mutation-file -- 要变异的文件路径它展开为stryker run --checkers --incremental --mutate 你的文件。注意仓库文档只对npm run test-mutation做了说明没有解释test-mutation-file三个参数的具体语义命令形态以上述脚本定义为准参数含义以 Stryker 自身文档为准不要凭名字猜测。理解 vitest.config-mutation.mts为什么有些测试不在变异运行里变异测试用的 vitest.config-mutation.mts 与日常单测配置不同有两点值得注意文件头部注释写明「Stryker doesnt allow multi-project vitest configs yet」因此这里是一份单项目配置日常npm run test走的是vitest.config.mts的多项目配置。exclude列表中除了常规的**/www/**、**/scripts/**等目录还显式排除了两个文件test/component/Tooltip/Tooltip.payload.spec.tsx test/chart/Treemap.spec.tsx注释说明这两个测试「time out when running inside stryker, not sure why」——在 Stryker 里会超时原因不明。也就是说如果你的代码改动与 Tooltip payload 或 Treemap 相关变异测试并不会用这两个 spec 来裁决变异体评估结果时要意识到这一覆盖缺口。该配置还固定process.env.TZ UTC测试在jsdom环境下运行setup 文件包括test/vitest.setup.ts等与日常单测保持一致。执行与查看结果范围收窄后执行npm run test-mutation结果有两个出口CONTRIBUTING.md 的说明控制台直接输出测试结果对应clear-text/progressreporterHTML 报告生成在仓库根目录的./reports文件夹。DEVELOPING.md 的「Autogenerated code」一节也确认npm run test-mutation会生成reports——mutation testing report。跑完后打开reports下的 HTML 报告即可逐变异体查看存活/被杀情况。限制与边界变异测试不在 CI 中运行DEVELOPING.md 原文「Mutation tests do not run in CI」它完全是本地行为PR 流程不会因为变异测试被阻塞。全量跑耗时以小时计CONTRIBUTING.md 建议的运行方式是更新stryker.config.mjs中的文件清单后再执行不要把「一次跑全量」当作日常手段。改动mutate范围只是本地配置调整提交 PR 时是否需要还原该配置仓库文档没有明确要求按你团队的贡献约定处理即可。下一步如果变异测试暴露出存活的变异体说明现有测试没有覆盖到该行为修复方式是补测试而不是改 Stryker 配置单测集中在test目录运行方式为npm run test或npm run test -- path/to/TestFile.spec.tsx见 DEVELOPING.md 的「Running unit tests」一节补完后把目标文件重新放入mutate再跑一轮即可。【免费下载链接】rechartsRedefined chart library built with React and D3项目地址: https://gitcode.com/GitHub_Trending/re/recharts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表