如何解决Cypress/Javascript中TypeError: Cannot read property 'fraction' of undefined报错
修复步骤
- 该TypeError通常由调用
fraction()时传入非法参数触发,最常见的情况是你从页面抓取的赔率值未做清洗,传入了空字符串、undefined、包含多余空格/特殊符号的内容,mathjs无法将其解析为合法分数格式 - 第一步:调用
fraction()前先做参数合法性校验,清洗抓取到的原始值
// 示例:抓取赔率后先做清洗过滤 const rawOdds = Cypress.$('.your-odds-selector').text().trim() // 校验值合法性,排除空值、非数字/分数格式内容 if (!rawOdds || !/^(\d+(\/\d+)?|\d+\.\d+)$/.test(rawOdds)) { throw new Error(`非法赔率值: ${rawOdds}`) }
- 第二步:确认mathjs导入方式符合Cypress环境要求,不要使用全局挂载的umd包,推荐用npm安装后模块化导入
// cypress测试文件顶部导入写法 import { fraction, equal } from 'mathjs'
- 第三步:赔率比对不要直接用全等运算符,用mathjs内置的
equal()方法做值比对,避免不同格式(小数/分数)相同值被判为不等的问题
// 存储抓取到的赔率为fraction类型 const savedOdds = fraction(rawOdds) // 拿到下拉框选中的目标值后转fraction再比对 const targetOdds = fraction(cy.get('.odds-format-select').invoke('val')) expect(equal(savedOdds, targetOdds)).to.be.true
- 特殊场景适配:如果你需要解析美式赔率(格式为±开头的整数,比如+150、-200),mathjs原生不支持直接解析,需要先自行转换为小数格式再传入
fraction()方法
内容的提问来源于stack exchange,提问作者BruceyBandit
相关产品推荐
相关产品推荐

