Cypress结合Mocha使用模板字符串做数据驱动测试异常求助
问题原因
- 核心问题是你定义
dataSet时给ctx字段赋值的字符串前导多了一个空格,实际值是' cats'(注意开头空格),而非你预期的无空格字符串'cats':
控制台打印空白字符时视觉辨识度低,会让你误以为输出的是let dataSet: VoucherTestData[] = [ { ctx: ' cats', // 此处值开头有多余空格,和目标匹配值不一致 checkoutActions: new CheckoutActionsCats(), }, ];cats,但全等判断、作为键名取值时,空格会被严格识别,自然无法和无空格的键匹配成功。 - 你测试直接写死
'cats'作为键可以正常取值,反过来也验证了该问题和模板字符串、Cypress/Mocha运行环境无关,只是ctx值本身携带了多余字符。
解决方法
- 直接移除
ctx字段值的多余空格即可:let dataSet: VoucherTestData[] = [ { ctx: 'cats', // 删掉开头的多余空格 checkoutActions: new CheckoutActionsCats(), }, ]; - 如果无法保证传入的
ctx值没有首尾空白,可以统一调用trim()方法处理后再使用:// 全等判断前处理 if (data.ctx.trim() === 'cats') { console.log('Data is cats'); } // 取值前处理 this.url = Cypress.env(`${data.ctx.trim()}Baseurl`); this.product = this.products[data.ctx.trim()]; this.testVoucher = this.vouchers[data.ctx.trim()].voucher; - 后续调试字符串匹配问题时,可以给打印值包裹特殊标识快速识别空白字符:
console.log(`|${data.ctx}|`); // 若输出为| cats|即可直接看到开头的多余空格
内容的提问来源于stack exchange,提问作者mismas
相关产品推荐
相关产品推荐

