如何运行Jest中test.each语句块内的单个测试用例?
运行Jest test.each内单个测试用例的方法
你的疏漏点
jest -t <name> 完全支持匹配test.each生成的动态测试用例,你之前执行后所有测试被跳过的核心原因是:你传入的名称没有匹配到test.each运行时生成的真实测试用例名称。
你代码里写的.add($a, $b)是模板字符串,Jest运行时会把$a、$b替换成对应用例的实际值,最终生成的三个测试用例名称分别是:
.add(1, 1).add(1, 2).add(2, 1)
如果你传的参数是带$符号的模板、或者字符串拼写和真实生成的名称不匹配,Jest找不到符合条件的测试,就会全部跳过。
具体使用方法
方法1:命令行用jest -t直接匹配
直接传入真实生成的测试用例名即可,注意如果名称包含空格、特殊符号,需要用引号包裹:
- 单独跑a=1、b=1的用例:
jest -t ".add(1, 1)" - 模糊匹配所有a=1的用例:
jest -t ".add(1,"(会匹配前两个用例)
如果测试外层包裹了describe块,还可以加上describe的名称做更精准的匹配,比如外层describe名称为算术方法测试,真实用例全称为算术方法测试 .add(1, 1),执行时传入:jest -t "算术方法测试 .add(1, 1)"即可。
如果测试用例值包含引号、反斜杠等特殊转义字符,匹配时需要对应做转义处理,避免匹配失败。
方法2:本地调试临时过滤用例
如果是开发阶段临时调试,不想修改命令行参数,可以直接修改test.each的用例数组,临时注释掉不需要跑的用例即可,调试完成后再恢复原数组:
// 临时只跑a=1、b=2的用例 test.each([ // {a: 1, b: 1, expected: 2}, {a: 1, b: 2, expected: 3}, // {a: 2, b: 1, expected: 3}, ])('.add($a, $b)', ({a, b, expected}) => { expect(a + b).toBe(expected); });
内容的提问来源于stack exchange,提问作者JoseHdez_2
相关产品推荐
相关产品推荐

