如何在CLI convert命令测试中校验float类型的输出值
测试代码调整方案
你可以参考以下修改后的代码完成float类型输出校验,核心思路是先将字符串格式的stdout转换为数值类型,再使用适配浮点数的断言避免精度校验问题:
describe('convert', () => { // 无参数convert命令用例,可根据实际默认输出调整预期值 test .stdout() .command(['convert']) .it('runs convert', ctx => { // 先移除输出前后的换行、空格等空白字符,再转为float const output = Number(ctx.stdout.trim()) // 示例为默认换算1单位EUR到USD的预期,可替换为你的实际预期值,0.0001为允许的误差范围 expect(output).to.be.closeTo(0.9234, 0.0001) }) test .stdout() .command(['convert', '--amount', '50', '--from', 'EUR', '--to', 'USD']) .it('convert --amount 50 --from EUR --to USD', ctx => { const output = Number(ctx.stdout.trim()) // 示例预期50欧元兑换为54.1234美元,可根据实际汇率调整预期值和误差范围 expect(output).to.be.closeTo(54.1234, 0.0001) }) })
关键调整说明
- 输出预处理:CLI的stdout默认是字符串格式,且通常末尾会自带换行符,所以先用
trim()移除前后空白字符,再通过Number()转为浮点数 - 浮点数断言:不要用
equal或contain直接比对,改用closeTo断言,第二个参数为允许的误差范围,适配汇率这类可能有轻微波动或者浮点计算精度偏差的场景 - 如果你的命令输出不是纯数字,比如包含提示文本,例如输出为
Result: 1.2345 USD,可以用正则提取数值部分再做校验,参考写法:const numMatch = ctx.stdout.match(/(\d+\.\d+)/) if (!numMatch) throw new Error('未找到输出中的数值') const output = Number(numMatch[1])
内容的提问来源于stack exchange,提问作者Jorge G.B.
相关产品推荐
相关产品推荐

