jest-each能否在测试用例描述中访问传入参数并调用其属性方法?
Jest it.each参数插值问题解答
问题原因
原生it.each的字符串插值语法仅支持直接读取用例对象的顶层属性,不支持链式调用属性/方法,也不会自动序列化数组等复杂类型的值到测试名称中,所以才会出现你遇到的$numbers.length直接原样输出的问题。
官方支持的解决方案
1. 测试名称生成函数(推荐)
Jest支持给it.each传入函数作为测试名称参数,函数可以拿到当前测试用例的所有参数和序号,你可以在函数内完成任意计算、插值逻辑:
it.each([ { numbers: [1, 2, 3] }, { numbers: [4, 5, 6] } ])(({ numbers }, index) => `Test case ${index}: Amount is ${numbers.length} => ${numbers}`, ({ numbers }) => { expect(true).toBeTruthy(); });
2. 手动循环生成测试用例(你当前的方案)
你用到的Array.forEach动态生成it用例的写法是完全合法的,也是Jest官方明确提及的标准动态测试生成方式。这种写法灵活性最高,不需要记忆it.each的特殊语法,对于需要复杂参数处理的场景更易维护,完全可以正常使用。
3. 顶层属性预计算
如果要继续使用字符串模板插值,可以把需要用到的计算结果提前放到用例对象的顶层:
it.each([ { numbers: [1, 2, 3], length: 3, str: '1,2,3' }, { numbers: [4, 5, 6], length: 3, str: '4,5,6' } ])('Test case %#: Amount is $length => $str', ({ numbers }) => { expect(true).toBeTruthy(); });
这种方式灵活性较低,仅适合简单场景使用。
内容的提问来源于stack exchange,提问作者Question3r
相关产品推荐
相关产品推荐

