Cypress断言失败求助:数值格式匹配异常排查
Cypress断言失败排查:看似相同的字符串不匹配问题
问题核心是两个字符串的空格类型不一致:页面返回文本中的空格是非-breaking空格(NBSP,Unicode编码U+00A0),而你代码生成的formattedamt1里是普通空格(U+0020)。这两个字符视觉上完全相同,但实际编码不同,导致include断言无法匹配。
从错误提示就能看出差异:'10 709,27'(NBSP) vs '10 709,27'(普通空格)。
解决方案
以下几种方式都能解决问题:
处理页面文本,统一空格类型
修改获取页面文本的逻辑,把NBSP替换成普通空格:cy.getBySel('amt1').should($test => { const test1 = $test.text() .replace('€', " ") .replace(/\u00A0/g, ' ') // 替换所有NBSP为普通空格 .trim() expect(test1).to.include(formattedamt1) })生成预期值时使用NBSP
调整formattedamt1的替换逻辑,用NBSP替代普通空格:const formattedamt1 = amt1.trim().replace(/\d{2}(?!$)/, '$& ') // 这里的空格是NBSP,也可以写成'\u00A0'跳过空格,直接比较数值
更稳妥的方式是提取纯数值部分,转换为数字后比较,避免格式差异影响:cy.getBySel('amt1').should($test => { const testText = $test.text() // 移除欧元符号、所有空格,把逗号转成点后转成数值 const testValue = parseFloat(testText.replace(/[€\s]/g, '').replace(',', '.')) // 计算预期数值(保留两位小数) const expectedValue = parseFloat((250.78 + 5005.58 + 20001.35) * 0.424).toFixed(2) expect(testValue).to.equal(parseFloat(expectedValue)) })
内容的提问来源于stack exchange,提问作者ZombiePie
相关产品推荐
相关产品推荐

