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

如何用Flow正确标注生成器以实现100%代码覆盖率?

解决Flow生成器yield语句未被覆盖的问题

你遇到的问题核心在于Flow的覆盖率统计是基于代码实际执行情况的——生成器里的yield属于惰性执行代码,只有调用生成器的next()方法时,对应的yield才会被触发执行。你目前只定义了生成器函数但没有触发它的执行流程,所以这三个yield表达式都没被Flow标记为已覆盖。

具体解决方法:

编写代码调用生成器,遍历所有yield的产出值,确保每个yield语句都被执行到。

修正后的示例代码:

// @flow
function* generator(): Generator<number, void, any> {
  yield 1;
  yield 2;
  yield 3;
}

// 触发生成器的完整执行流程
const gen = generator();
gen.next(); // 执行第一个yield 1
gen.next(); // 执行第二个yield 2
gen.next(); // 执行第三个yield 3

验证效果:

再次执行覆盖率统计命令:

$ npx flow coverage --color generator.js

此时Flow会统计到所有7个表达式都已被执行,覆盖率将达到100%。

本质上,生成器的yield不会在函数定义阶段自动执行,必须通过next()主动触发每个产出步骤,Flow才能识别这些代码已被执行,从而移除未覆盖的标记。

内容的提问来源于stack exchange,提问作者K.Ohara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:17