如何用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
相关产品推荐
相关产品推荐

