Jest导入外部测试数据调用test.each报错原因是什么?
报错原因
问题出在CommonJS模块的导入导出逻辑不匹配。
你在sum-test-cases.js中使用的是命名导出:exports.sumTestCases = sumTestCases,这种写法导出的整体是一个对象,对象上挂载了sumTestCases属性,属性值才是你写的测试用例数组。
此时你在测试文件里写const sumTestCases = require('./sum-test-cases'),拿到的sumTestCases变量是整个导出对象,也就是{ "sumTestCases": [Array] },和报错信息里提示的传入值完全一致——test.each要求传入数组或者标签模板字面量,你传了个普通对象,自然会报错。
而你直接在测试文件内部定义sumTestCases时,变量本身就是测试用例数组,符合test.each的参数要求,所以能正常运行。
修复方案
两种改法任选其一即可:
- 改导入语句:用解构赋值取出导出对象里的数组属性
// sum.test.js const { sumTestCases } = require('./sum-test-cases'); test.each(sumTestCases)('.add($a, $b)', ({a, b, expected}) => { expect(a + b).toBe(expected); });
- 改导出语句:直接把数组作为模块的导出值
// sum-test-cases.js const sumTestCases = [ {a: 1, b: 1, expected: 2}, {a: 1, b: 2, expected: 3}, {a: 2, b: 1, expected: 3}, ]; module.exports = sumTestCases;
改完之后原来的导入语句不需要调整,就能直接拿到数组,测试可正常运行。
内容的提问来源于stack exchange,提问作者s-hunter
相关产品推荐
相关产品推荐

