Jest中test.each()结合异步函数执行结果异常,是否为Bug?
Jest test.each 搭配异步函数未正确执行所有用例的问题
你遇到的问题大概率是测试用例命名重复导致的。当使用test.each批量生成测试时,如果标题没有加入动态占位符,所有生成的测试用例会共用同一个名称,Jest在这种场景下可能不会完整执行所有迭代,或者测试报告里只展示第一个用例的结果,看起来像是第二个用例没被检查。
修正方法
给test.each的标题添加占位符,让每个测试用例拥有唯一名称:
async function getVal(n) { return n === 1 ? "one" : "two"; } test.each([ [1, "one"], [2, "SOME VALUE"] ])("getVal(%d) 应返回 '%s'", async (n, expected) => { const val = await getVal(n); expect(val).toEqual(expected); });
这里用%d(数字占位符)和%s(字符串占位符)对应测试数据里的参数,生成的测试用例名称会变成getVal(1) 应返回 'one'和getVal(2) 应返回 'SOME VALUE',Jest会正确执行两个用例,第二个用例的预期值错误时会正常触发失败。
另外建议检查你的Jest版本,旧版本(比如26.x及更早)可能存在test.each与异步函数兼容的bug,升级到最新稳定版(如29.x系列)也能避免这类问题。
内容的提问来源于stack exchange,提问作者atava
相关产品推荐
相关产品推荐

